Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
основы программирования в Windows.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
88.3 Кб
Скачать

1.2.2. Типы данных в Windows

В Windows-программах не слишком широко применяются стандартные типы данных из С или С++, такие как int или char*. Вместо них используются типы данных, определенные в различных библиотечных (header) файлах. Наиболее часто используемыми типами являются [11]: HANDLE, HWND, BYTE, WORD, DWORD, UNIT, LONG, BOOL, LPSTR и LPCSTR.

Тип HANDLE обозначает 32-разрядное целое, используемое в качестве дескриптора. Есть несколько похожих типов данных, но все они имеют ту же длину, что и HANDLE, и начинаются с литеры Н. Дескриптор – это просто число, определяющее некоторый ресурс.

Тип HWND обозначает 32-разрядное целое – дескриптор окна. В программах, использующих библиотеку MFC, дескрипторы применяются не столь широко, как это имеет место в традиционных программах.

Тип BYTE обозначает 8-разрядное беззнаковое символьное значение.

Тип WORD – 16-разрядное беззнаковое короткое целое.

Тип DWORD – беззнаковое длинное целое.

Тип UINT - беззнаковое 32-разрядное целое.

Тип LONG эквивалентен типу long.

Тип BOOL обозначает целое и используется, когда значение может быть либо ис-тинным, либо ложным.

Тип LPSTR определяет указатель на строку.

Тип LPCSTR – константный (const) указатель на строку.

1.2.3. Графический и консольный интерфейс

В Windows поддерживается два типа приложений: основанные на графическом интерфейсе (graphical user interface, GUI) и консольные (console user interface, CUI) У приложений первого типа внешний интерфейс чисто графический - создаются окна, меню, диалоговые окна и т.д. Почти все стандартные программы Windows и большинство пользовательских программ являются GUI - приложениями. Приложения консольного типа работают в текстовом режиме: они не формируют окна, не обрабатывают сообщения, но на экране тоже размещаются в окне, правда черного цвета и могут вызывать диалоговые окна.

Все Windows-программы, написанные на языке C++ начинают выполнение с вызова функции входа. В среде Win32 существует четыре модификации таких функций:

int WINAPI WinMain(

HINSTANCE hInstance, //дескриптор, присваиваемый запущенному приложению

HINSTANCE hPrevInstance, //для совместимости с win16, в win32 не используется

LPSTR lpCmdLine, //указатель на командную строку, если приложение так запущено

int nCmdShow ); //значение, которое может быть передано в функцию ShowWindow()

int WINAPI wWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow);

int _ _cdecl main( int argc, //количество аргументов, переданных в командной строке

char *argv[], //массив размером argc с указателями на ANSI-строки.

//Каждый элемент массива указывает на один из аргументов командной строки

char *envp[] ); //массив указателей на ANSI-строки. Каждый элемент массива

// указывает на строку - переменную окружения (область памяти,

// выделенная в адресном пространстве процесса)

int _ _cdecl wmain( int argc, //количество аргументов, переданных в командной строке

wchar_t *argv[], //массив размером argc с указателями на UNICODE-строки.

//Каждый элемент массива указывает на один из аргументов командной строки

wchar_t *envp[] );//массив указателей на UNICODE-строки. Каждый элемент массива

//указывает на строку - переменную окружения (область памяти, выделенная

//в адресном пространстве процесса)

Первые две функции используются при разработке приложения с графическим интерфейсом (GUI), две другие - при консольном (CUI). Приставка w перед названием функции показывает, что функция используется для работы с Unicode - строками, обычные функции работают с ANSI - строками. На самом деле входная функция операционной системой не вызывается, вместо этого происходит обращение к стартовой функции из библиотеки С/С++. Она инициализирует библиотеку С/С++, а также обеспечивает корректное создание любых объявленных глобальных и статических объектов до того, как начнется выполнение программного кода. В таблице 1.1 показано, в каких случаях реализуются различные функции входа [7].

В целом все стартовые функции выполняют следующие однотипные задачи:

  • считывают указатель на полную командную строку нового процесса;

  • считывают указатель на переменные окружения нового процесса;

  • инициализируют глобальные переменные из библиотеки С/С++

  • инициализируют кучу (динамически распределяемую область памяти), используе-мую С-функциями выделения памяти (malloc, calloc) и другими процедурами низко-уровневого ввода-вывода;

  • вызывают конструкторы всех глобальных и статических объектов С++-классов.

Закончив эти операции, стартовая функция обращается к функции входа.