C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Нетология

 42 - Функция WinMain() / Win 32 API / Win32 API

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

Любая программа имеет точку входа. То есть то место откуда непосредственно начинается Ваша программа. В языке С - это функция, в которую будет передано управление сразу после запуска программы. Не зря я говорю о запуске. Прежде чем будет выполняться Ваш код операционная система должна сделать много всего. Прочитать программу с диска, выделить ей память, настроить сегменты данных и кода, сама программа должна проверить операционную систему и выполнить ряд действий. Вот только после проведения всех необходимых настроек управление будет передано Вашим командам. В случае программирования для Windows это будет функция WinMain. Она вот такая:

int WINAPI WinMain
(
	HINSTANCE hInstance,	// указатель на текущий экземпляр
	HINSTANCE hPrevInstance,	// указатель на предыдущйи запушенный экземпляр
	LPSTR lpCmdLine,		// командная строка
	int nCmdShow		// тип отображения окна программы
);

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

42.gif (2638 b)

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

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


| |
Автор Каев Артем.
[AD]





Letyshops [lifetime]