Существует ли #define, связанное с SubSystem
Я создаю main с помощью макроса и должен иметь возможность проверять выбранную SubSystem во время компиляции /SUBSYSTEM: WINDOWS или /SUBSYSTEM: CONSOLE, чтобы создать соответствующую основную функцию. Есть ли способ #define, который я могу проверить, выполнив это?
Ответы
Ответ 1
Если вы пытаетесь упростить задачу пользователям вашей библиотеки (или что-то еще), вы можете просто создать как WinMain
, так и main
из своего макроса. По умолчанию компоновщик устанавливает консольные приложения на main
, а win32 - на WinMain
. Другая "основная" функция будет проигнорирована.
(Предположительно, остальная часть кода не использует ни один из аргументов основной функции (argc
, argv
, hInstance
и т.д.), если он работает с обоими.)
Можно использовать параметр _CONSOLE
, но он не появляется автоматически; вам нужно добавить его вручную в свойства проекта. С другой стороны, выбор символа запуска является автоматическим. Таким образом, просто предоставление обеих функций и возможность выбора компоновщика могут сделать жизнь проще, потому что разработчику проекта не нужно ничего устанавливать и действительно может переключиться с Windows на консольное приложение (возможно, даже на конфигурацию), не делая этого что-нибудь.
Ответ 2
_CONSOLE
должен сделать трюк для вас.
Также вы можете выбрать подсистему с помощью #pragma comment( linker, "/subsystem:windows" )
или #pragma comment( linker, "/subsystem:console" )
, если вы действительно хотите пройти этот маршрут.
Ответ 3
Это не так, как это действительно работает. Вам нужно написать совершенно другой код в консольном приложении и в родном приложении Windows. В консольном приложении вы используете printf или cout для создания вывода, не так много, если оно используется для мыши. Для родного приложения Windows требуется цикл сообщений и создание окна с процедурой окна, которая обнаруживает сообщение WM_PAINT для обновления окна. Etcetera.
Но вы можете написать код, который делает оба. Просто напишите как функцию main(), так и функцию WinMain(), CRT автоматически выберет правильный.