Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6452
Последний выпуск: 19.06.2015

Функция main в качестве главной функции Win32

27K
04 декабря 2013 года
mnanorn
78 / / 01.12.2013
Здравствуйте!

В проектах GNU (например, в GTK+) в качестве главной функции используется стандартная для Си
 
Код:
int main(int argc, char** argv)
Даже в оконных приложениях. Как это сделано? Т.е., а как же WinMain в Windows?

Спасибо.
436
06 декабря 2013 года
Meander
487 / / 04.09.2011
-mwindows компоновщику, некоторые говорят компилятору g++
315
05 декабря 2013 года
sadovoya
757 / / 19.11.2005
WinMain -- распространенная, но не обязательная точка входа для оконных программ ОС Windows. Майкрософт пишет так:

Цитата:

Remarks

The name WinMain is used by convention by many programming frameworks. Depending on the programming framework, the call to the WinMain function can be preceded and followed by additional activities specific to that framework.

Your WinMain should initialize the application, display its main window, and enter a message retrieval-and-dispatch loop that is the top-level control structure for the remainder of the application's execution. Terminate the message loop when it receives a WM_QUIT message. At that point, your WinMain should exit the application, returning the value passed in the WM_QUIT message's wParam parameter. If WM_QUIT was received as a result of calling PostQuitMessage, the value of wParam is the value of the PostQuitMessage function's nExitCode parameter. For more information, see Creating a Message Loop.

ANSI applications can use the lpCmdLine parameter of the WinMain function to access the command-line string, excluding the program name. Note that lpCmdLine uses the LPSTR data type instead of the LPTSTR data type. This means that WinMain cannot be used by Unicode programs. The GetCommandLineW function can be used to obtain the command line as a Unicode string. Some programming frameworks might provide an alternative entry point that provides a Unicode command line. For example, the Microsoft Visual Studio C++ complier uses the name wWinMain for the Unicode entry point.



(см. здесь).

Например, компиляторы GNU GCC поддерживает это имя. Но запросто и стандартное для языка имя main. Main кроме того кросплатформенная штука. Фреймворки типа Qt, GTK обычно скрывают от программиста всякие api и нативные примочки. При препроцессировании и компиляции целевой ОС подсовывают то, что она ожидает. Примерно так.

P.S. При написании оконных программ для Windows на "чистом" Win32 API логично использовать WinMain. Мне правда удавалось и из main оконку на api делать.

27K
06 декабря 2013 года
mnanorn
78 / / 01.12.2013
Вот, что имею ввиду. Текст:
 
Код:
#include <windows.h>

int main(int argc, char** argv)
{
    MessageBox(NULL, "Text", "Caption", MB_OK);
    return 0;
}
Результат:


Обратите внимание на окно консоли позади окна сообщения. Это результат применения main вместо WinMain. Как его скрывают библиотеки, вроде GTK+?
6
06 декабря 2013 года
@pixo $oft
3.4K / / 20.09.2006
FreeConsole();

=)
27K
07 декабря 2013 года
mnanorn
78 / / 01.12.2013
Цитата: Meander
-mwindows компоновщику, некоторые говорят компилятору g++


Спасибо за помощь. Очередной раз убеждаюсь: нужно идти и учить матчасть.

Цитата: @pixo $oft
FreeConsole();

=)


И Вам спасибо. Задачу, безусловно, выполняет, однако не так. Окно консоли появляется и тут же пропадает. Но появляется. :)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог