| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Шаг 42 - Функция WinMain().

Любая программа имеет точку входа. То есть то место откуда непосредственно начинается Ваша программа. В языке С - это функция, в которую будет передано управление сразу после запуска программы. Не зря я говорю о запуске. Прежде чем будет выполняться Ваш код операционная система должна сделать много всего. Прочитать программу с диска, выделить ей память, настроить сегменты данных и кода, сама программа должна проверить операционную систему и выполнить ряд действий. Вот только после проведения всех необходимых настроек управление будет передано Вашим командам. В случае программирования для Windows это будет функция WinMain. Она вот такая:
int WINAPI WinMain
(
HINSTANCE hInstance, 		// указатель на текущий экземпляр
HINSTANCE hPrevInstance, 	// указатель на предыдущйи запушенный экземпляр
LPSTR lpCmdLine, 		// командная строка
int nCmdShow 			// тип отображения окна программы
);
Определена она в windows.h. Давайте посмотрим параметры. Первый параметр - это указатель на саму программу, каждая программа при запуске получает уникальный идентификатор, Windows просто передает его Вам. Второй - должен указывать на экземпляр программы, который был запущен ранее. В WIN32 - этот параметр всегда равен NULL, в WIN31 было иначе. То есть он не нужен. Что делать, если нужно определять все-таки запущен другой экземпляр или нет ? Использовать семафоры CreateMutex(). Чтобы получить представление о том, как это делается смотрите API "Шаг 9 - Синхронизация файловых операций Mutex". Следующий параметр - это командная строка, как указатель на последовательность символов оканчивающихся нулем. Ее извлекать лучше с помощью GetCommandLine(). Последний параметр - это тип отображения окна, то есть совет Windows как окну надо отобразиться. Как известно советы бывают всякие черные, белые, красные и так далее. Дело в том, что у пользователя есть возможность указать как он хочет запустить программу, допустим, если он удерживает клавишу SHIFT, то программа должна запускаться в минимизированном виде. Проверьте на блокноте (notepad.exe), если не верите. У значков программ через ПУСК есть таже возможность указатель, как запускать.

42.gif (2638 b)

Вернуть WinMain должна результат своей работы. Но на самом деле Windows никогда не проверяет это значение. В DOS - это значение можно было проверять в BAT файлах, анализируя результат выполнения. Я писал диплом в Институте как раз примерно про это. То есть как в DOS организовать автоматические цепочки обработки информации. Сложность реальная была одна, как узнать результат работы другой программы. Вот и было два выхода - это стандартный файл с отчетом о работе и кода завершения. Используя и то и другое вроде как-то получалось. Вообще программа для Windows должна завершаться когда получит сообщение WM_QUIT. Это сообщение может послать как пользователь, зарыв главное окно, так и операционная система, например, при снятии задачи или завершении работы. Обратите внимание на то, что в WINAPI именно такое правило передачи параметров через стек.

Примеры применения ее для программирования на С смотрите в шагах:

"Подробности - #pragma message"
"Шаг 17 - Абстракные классы" (ActiveX)
"Шаг 4 - Окно Windows на С" (WinAPI)
"Шаг 18 - Как узнать имя EXE файла программы" (WinAPI)
"Шаг 31 - Программа, которая не удаляется из списка задач" (WinAPI)


Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz