В частности, есть ли способ создать приложение Windows без прямого указания его с помощью мастера «нового проекта»? Очевидно, что просто включение «windows.h» автоматически не создает главную функцию, поэтому, если бы я хотел создать приложение Windows «с нуля», как бы я это сделал?Можно ли вызвать WinMain из обычного основного?
ответ
icktoofay в основном правильно, за исключением одной части:
Это то, что происходит в программе стандарт C, но вы можете использовать
WinMain
вместо этого, который не является стандартным. Еслиmain
нет, ноWinMain
есть, он назоветWinMain
вместо соответствующих параметров.
Решающий фактор в том, что вторичная точке входа в приложении, (функция вызывается start
или _start
есть), который является subsystem is specified к линкеру.
Если вы строите вручную, вы можете добавить переключатель /SUBSYSTEM
в командной строке компоновщика, чтобы указать, что вы создаете приложение Windows (который будет ожидать WinMain
или wWinMain
точку входа), в отличие от консольного приложения (который будет ожидать точку входа main
или wmain
). Если вы создаете Visual Studio, вы можете выбрать подсистему в настройках компоновщика свойств проекта C++.
Я чувствую себя полным новичком, говорящим об этом, но что такое 'start'? Я программировал в течение многих лет (хотя и не на C++, хотя я далек от нового) и никогда не слышал об этом. – sircodesalot
'start' или' _start' - это функция, которая автоматически связана с использованием среды выполнения C (например, Microsoft Visual C++ Runtime или glibc) за кулисами, которая заботится о некоторых деталях инициализации и вызывает вашу запись (например, 'main' или' WinMain') для вас. Он выполняет такие функции, как инициализация глобальных и статических переменных и подготовка аргументов точки входа. Все это происходит прозрачно и тихо в фоновом режиме. –
А, так по сути, мне нужно прекратить начинать wuss и узнавать о компиляции/увязывании. Благодарю. – sircodesalot
Когда программа запускается, вызывается функция start
или . Определение этой функции включено в библиотеку, которая, как правило, автоматически связана. В стандартной программе C она будет запускать некоторые вещи, а затем вызывает вашу функцию main
.
Это то, что происходит в стандарте C, но вы можете использовать WinMain
вместо этого, что не является стандартным. Если main
нет, но WinMain
есть, он назовет WinMain
вместо соответствующих параметров.
Таким образом, нет необходимости иметь функцию main
; WinMain
служит этой цели, а не main
. Ответ
Поскольку подпись - 'WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)', как бы я создал «HINSTANCE»? – sircodesalot
@sircodesalot - 'HINSTANCE' определен в 'windows.h', поэтому просто' #include
Правильно, но что-то нужно передать в' WinMain', так как бы я это сделал? – sircodesalot
- 1. Можно ли вызвать другие методы метода класса из основного класса?
- 2. Можно ли вызвать метод робота вне «основного» класса роботов?
- 3. Untiy | Найти можно вызвать только из основного потока
- 4. Как вызвать метод из основного?
- 5. Можно ли вызвать модуль ClojureScript из обычного webapp jQuery или AngularJS?
- 6. Можно ли вызвать Powershell из процесса ASP.Net
- 7. Можно ли вызвать helper_method из другого помощника?
- 8. Можно ли вызвать FragmentManager из ActionProvider?
- 9. Можно ли вызвать вид из другого представления?
- 10. Можно ли вызвать SKReceiptRefreshRequest из main()?
- 11. Можно ли вызвать DllMain из .exe?
- 12. Можно ли вызвать модуль Python из ObjC?
- 13. Можно ли вызвать метод из абстрактного класса?
- 14. Можно ли вызвать диалоговое окно из апплета?
- 15. Можно ли вызвать код C из php
- 16. Можно ли вызвать pthread_exit из main?
- 17. AS3- Можно ли вызвать переменную из строки?
- 18. Можно ли вызвать метод из запущенного приложения
- 19. Можно ли вызвать GetThreadTimes() из потока?
- 20. Можно ли вызвать msg из другого класса?
- 21. Можно ли вызвать Redis из MySQL?
- 22. Можно ли вызвать функцию из объекта js?
- 23. Можно ли вызвать локальную функцию из ssh?
- 24. Можно ли вызвать код clojure из C++?
- 25. Можно ли вызвать performSegueWithIdentifier из другого класса?
- 26. Можно ли вызвать canvas.drawWindow() из обработчика onload?
- 27. Можно ли вызвать сервлет из css?
- 28. Можно ли вызвать DynamicMethod из MethodBuilder/ConstructorBuilder
- 29. Можно ли вызвать php-скрипт из другого?
- 30. Можно ли вызвать метод onReceive из диалога?
Хмм какой компилятор? Какая среда? Простейшая программа содержит основную функцию (стандартное требование C++), и вы можете просто запустить компилятор из оболочки на нем - вам вообще не нужны умные мастера. –
Пробуждение в визуальной студии – sircodesalot
Для тех из вас, кто читает это в ~ будущем ~. С тех пор я узнал (от * Windows через C++ *), что вы можете переключать подсистему (в Visual Studio), перейдя в Project> Properties> Configuration Properties> Linker> System> SubSystem. Если вы установите его на * Не задано *, вы можете использовать либо 'main', либо' WinMain' (компилятор выведет). Как упоминалось в * Windows через C++ *, это, вероятно, должно быть установлено по умолчанию (это не так), но опять же в программировании Win32 существует множество неудобств. – sircodesalot