2013-05-29 3 views
4

В частности, есть ли способ создать приложение Windows без прямого указания его с помощью мастера «нового проекта»? Очевидно, что просто включение «windows.h» автоматически не создает главную функцию, поэтому, если бы я хотел создать приложение Windows «с нуля», как бы я это сделал?Можно ли вызвать WinMain из обычного основного?

+0

Хмм какой компилятор? Какая среда? Простейшая программа содержит основную функцию (стандартное требование C++), и вы можете просто запустить компилятор из оболочки на нем - вам вообще не нужны умные мастера. –

+0

Пробуждение в визуальной студии – sircodesalot

+0

Для тех из вас, кто читает это в ~ будущем ~. С тех пор я узнал (от * Windows через C++ *), что вы можете переключать подсистему (в Visual Studio), перейдя в Project> Properties> Configuration Properties> Linker> System> SubSystem. Если вы установите его на * Не задано *, вы можете использовать либо 'main', либо' WinMain' (компилятор выведет). Как упоминалось в * Windows через C++ *, это, вероятно, должно быть установлено по умолчанию (это не так), но опять же в программировании Win32 существует множество неудобств. – sircodesalot

ответ

4

icktoofay в основном правильно, за исключением одной части:

Это то, что происходит в программе стандарт C, но вы можете использовать WinMain вместо этого, который не является стандартным. Если main нет, но WinMain есть, он назовет WinMain вместо соответствующих параметров.

Решающий фактор в том, что вторичная точке входа в приложении, (функция вызывается start или _start есть), который является subsystem is specified к линкеру.

Если вы строите вручную, вы можете добавить переключатель /SUBSYSTEM в командной строке компоновщика, чтобы указать, что вы создаете приложение Windows (который будет ожидать WinMain или wWinMain точку входа), в отличие от консольного приложения (который будет ожидать точку входа main или wmain). Если вы создаете Visual Studio, вы можете выбрать подсистему в настройках компоновщика свойств проекта C++.

+0

Я чувствую себя полным новичком, говорящим об этом, но что такое 'start'? Я программировал в течение многих лет (хотя и не на C++, хотя я далек от нового) и никогда не слышал об этом. – sircodesalot

+1

'start' или' _start' - это функция, которая автоматически связана с использованием среды выполнения C (например, Microsoft Visual C++ Runtime или glibc) за кулисами, которая заботится о некоторых деталях инициализации и вызывает вашу запись (например, 'main' или' WinMain') для вас. Он выполняет такие функции, как инициализация глобальных и статических переменных и подготовка аргументов точки входа. Все это происходит прозрачно и тихо в фоновом режиме. –

+0

А, так по сути, мне нужно прекратить начинать wuss и узнавать о компиляции/увязывании. Благодарю. – sircodesalot

5

Когда программа запускается, вызывается функция start или . Определение этой функции включено в библиотеку, которая, как правило, автоматически связана. В стандартной программе C она будет запускать некоторые вещи, а затем вызывает вашу функцию main.

Это то, что происходит в стандарте C, но вы можете использовать WinMain вместо этого, что не является стандартным. Если main нет, но WinMain есть, он назовет WinMain вместо соответствующих параметров.

Таким образом, нет необходимости иметь функцию main; WinMain служит этой цели, а не main. Ответ

+0

Поскольку подпись - 'WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)', как бы я создал «HINSTANCE»? – sircodesalot

+0

@sircodesalot - 'HINSTANCE' определен в 'windows.h', поэтому просто' #include ' – shf301

+0

Правильно, но что-то нужно передать в' WinMain', так как бы я это сделал? – sircodesalot

Смежные вопросы