Операционные системы. Учебное пособие. Марапулец Ю.В. - 31 стр.

UptoLike

Составители: 

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].
Таблица 1.1
Тип приложения Функция
входа
Стартовая функция, встраиваемая в
исполняемый файл
GUI-приложение, работающее с
ANSI-символами и строками
WinMain() WinMainCRTStartup()
GUI-приложение, работающее с
Unicode-символами и строками
wWinMain() wWinMainCRTStartup()
CUI-приложение, работающее с
ANSI-символами и строками
Main() mainCRTStartup()
CUI-приложение, работающее с
Unicode-символами и строками
Wmain() wmainCRTStartup()
В целом все стартовые функции выполняют следующие однотипные задачи:
считывают указатель на полную командную строку нового процесса;
считывают указатель на переменные окружения нового процесса;
инициализируют глобальные переменные из библиотеки С/С++
инициализируют кучу (динамически распределяемую область памяти), используе-
мую С-функциями выделения памяти (malloc, calloc) и другими процедурами низко-
уровневого ввода-вывода;
вызывают конструкторы всех глобальных и статических объектов С++-классов.
Закончив эти операции, стартовая функция обращается к функции входа.
1.2.4. Создание элементарного графического окна
33
    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].
                                                                        Таблица 1.1
         Тип приложения             Функция     Стартовая функция, встраиваемая в
                                      входа             исполняемый файл
 GUI-приложение, работающее с      WinMain()           WinMainCRTStartup()
 ANSI-символами и строками
 GUI-приложение, работающее с     wWinMain()          wWinMainCRTStartup()
 Unicode-символами и строками
 CUI-приложение, работающее с        Main()              mainCRTStartup()
 ANSI-символами и строками
 CUI-приложение, работающее с       Wmain()             wmainCRTStartup()
 Unicode-символами и строками

      В целом все стартовые функции выполняют следующие однотипные задачи:
•   считывают указатель на полную командную строку нового процесса;
•   считывают указатель на переменные окружения нового процесса;
•   инициализируют глобальные переменные из библиотеки С/С++
•   инициализируют кучу (динамически распределяемую область памяти), используе-
    мую С-функциями выделения памяти (malloc, calloc) и другими процедурами низко-
    уровневого ввода-вывода;
•   вызывают конструкторы всех глобальных и статических объектов С++-классов.
    Закончив эти операции, стартовая функция обращается к функции входа.

     1.2.4. Создание элементарного графического окна



                                           33