Точки входа в программу

Почему при точке входа WinMain/wWinMain не запускается консоль. А при точке входа main — запускается. Как это работает? И как компилятор понимает, что WinMain/wWinMain является точкой входа, если стандартной является main . Как работать с точкой входа main без запуска консоли, используя заголовочный файл windows.h? Ещё хотелось бы спросить, где можно найти про это структурированную информацию (почитать про это, как это работает).

Отслеживать
28.4k 10 10 золотых знаков 57 57 серебряных знаков 118 118 бронзовых знаков
задан 25 сен 2018 в 17:37
244 2 2 серебряных знака 12 12 бронзовых знаков
25 сен 2018 в 18:28

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

как компилятор понимает что WinMain/wWinMain является точкой входа, если стандартной является main

Стандарт лишь определяет, что компилятор обязан поддерживать использование точки входа с прототипом int main(int argc, char **argv) . Стандарт не запрещает поддерживать любые другие точки входа. В случае Visual C++, точка входа определяется параметрами компоновщика /SUBSYSTEM и /ENTRY. Когда параметр /SUBSYSTEM имеет значение «WINDOWS», а параметр /ENTRY не определен, точкой входа является функция WinMain.

Торговля на бирже. Элементарная точка входа.

Как работать с точкой входа main без запуска консоли

Установив параметры компоновщика /ENTRY:»mainCRTStartup» /SUBSYSTEM:WINDOWS . В диалоговом окне свойств проекта эти параметры расположены в «Linker — Advanced — Entry point» и «Linker — System — Subsystem» соответственно.

Подробное описание принципов выбора точки входа можно прочитать здесь: точка входа в win32 приложении

Источник: ru.stackoverflow.com

Точка входа программы

Текст программы начинается с инструкции #include, которая позволяет включить в программу заголовочный файл WINDOWS.H:

WINDOWS.H включает в себя много других заголовочных файлов, содержащих объявления функций Windows, структур Windows, новые типы данных и числовые константы.

Читайте также:
Как скопировать программу в турбо паскаль

За инструкцией #includeследует объявлениеWndProc:

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

Это объявление в начале программы необходимо потому, что в тексте функции WinMainимеются ссылки на функциюWndProc.

В программе на языке С, написанной для традиционной среды, точкой входа является функция main. С этого места программа начинает выполняться. (Фактически функция main является точкой входа в ту часть программы, которая пишется программистом. Обычно компилятор С должен вставить некоторый стартовый код в исполняемый файл. Этот код и вызывает функциюmain.) Точкой входа программы для Windows является функцияWinMain.WinMain всегда определяется следующим образом:

36 [Джун] Точка входа в программу | Swift уроки

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

Эта функция использует последовательность вызовов WINAPI и, по своему завершению, возвращает операционной системе Windows целое. Функция называется WinMain. В ней есть четыре параметра.

Параметр hInstanceназывается описателем экземпляра (instance handle). Это уникальное число, идентифицирующее программу, когда она работает под Windows. Может так случиться, что пользователь запустит под Windows несколько копий одной и той же программы. Каждая копия называется «экземпляром» и у каждой свое значениеhInstance. Описатель экземпляра можно сравнить с «идентификатором задачи» или «идентификатором процесса» — обычными терминами многозадачных операционных систем.

Параметр hPrevInstance—всегда равен NULL.

Параметр szCmdLine— это указатель на оканчивающуюся нулем строку, в которой содержатся любые параметры, переданные в программу из командной строки. Вы можете запустить программу для Windows с параметром командной строки, вставив этот параметр после имени программы в командной строке MS-DOS или указать имя программы и параметр в окне диалога Run, которое вызывается из меню Start.

Параметр iCmdShow— число, показывающее, каким должно быть выведено на экран окно в начальный момент. Это число задается при запуске программы другой программой. Программисты достаточно редко обращаются к этому числу, но при необходимости такая возможность существует. В большинстве случаев число равно 1 или 7. Но лучше не думать об этом значении как о единице или как о семерке.

Читайте также:
Лучшая программа для массфолловинга

Лучше думайте о них как об идентификаторе SW_SHOWNORMAL (заданном в заголовочных файлах Windows равным 1) или идентификаторе SW_SHOWMINNOACTIVE (заданном равным 7). Префикс SW в этих идентификаторах означает «показать окно» (show window). Параметр показывает, необходимо ли запущенную пользователем программу выводить на экран в виде окна нормального размера или окно должно быть изначально свернутым.

Оконная процедура

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

У каждого окна, создаваемого программой, имеется соответствующая оконная процедура. Windows посылает сообщение окну путем вызова оконной процедуры, на основе этого сообщения окно совершает какие-то действия и затем возвращает управление Windows. «Windows посылает программе сообщение» — имеется в виду, что Windows вызывает функцию внутри программы. Параметры этой функции описывают параметры сообщения. Эта функция, находящаяся в вашей программе для Windows, называется оконной процедурой (window procedure). Все это называется ”Архитектура, управляемая событиями”.

Более точно, окно всегда создается на основе»класса окна». Класс окна определяет оконную процедуру,обрабатывающую поступающие окну сообщения.

Использование класса окна позволяет создавать множество окон на основе одного и того же класса окна и, следовательно, использовать одну и ту же оконную процедуру.Например, все кнопки во всех программах дляWindows созданы на основе одного и того же класса окна. Этот класс связан с оконной процедурой(расположенной в динамически подключаемой библиотекеWindows), которая управляет процессом передачи сообщений всем кнопкам всех окон.В объектно-ориентированном программировании любой»объект» несет в себе сочетание кода и данных.

Читайте также:
3d studio это программа специального назначения

Окно— это объект. Код— это оконная процедура. Данные— это информация, хранимая оконной процедурой, и информация,хранимая системойWindows для каждого окна и каждого класса окна, которые имеются в системе.Оконная процедура обрабатывает сообщения, поступающие окну.

Очень часто эти сообщения передают окну информацию о том, что пользователь осуществил ввод с помощью клавиатуры или мыши. Таким образом,например, кнопки»узнают» о том, что они нажаты. Другие сообщения говорят окну о том, что необходимо изменить размер окна или о том, что поверхность окна необходимо перерисовать.Когда программа дляWindows начинает выполняться, Windows строит для программы очередь сообщений(messagequeue). В этой очереди хранятся сообщения для любых типов окон, которые могли бы быть созданы программой.Небольшая часть программы, которая называется циклом обработки сообщений(message loop), выбирает эти сообщения из очереди и переправляет их соответствующей оконной процедуре. Другие сообщения отправляются непосредственно оконной процедуре минуя очередь сообщений.

Источник: studfile.net

«Точка входа консольного приложения» — Что это такое простыми словами?

Простыми словами, на примере, человеческим языком, образно =) Объясните!

Точка входа консольного приложения

комментировать
в избранное
Anast­ aziol­ og [18K]
8 лет назад

в среде Visual C++, как правило основная функция программы имеет имя «main» и называется «точкой входа». В написанных вами приложениях, которые для ввода-вывода данных используют только консоль (cmd), — main функция называется «точкой входа консольного приложения».

Ваш комментарий («1.1.1.cpp определяет точку входа для консольного приложения»), который автоматически был добавлен при создании начальной структуры проекта, есть информативной строкой, которая помогает программисту искать в своем листинге основную функцию main. Понимать этот комментарий надо так: «Именно в этом тексте где то есть main (должна быть main), с которого и начинается работа всего вашего консольного приложения».

Источник: www.bolshoyvopros.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru