一 一段代码
#if defined(WIN32)
#ifdef NDEBUG
#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
#else
#pragma comment(linker, "/SUBSYSTEM:CONSOLE")
#endif
#endif
二 代码解释
1 pragma comment
#pragma comment( comment-type [,"commentstring"] )
comment-type:compiler | exestr | lib | linker | user
2 linker options
(1)/SUBSYSTEM :通知操作系统如何运行 .exe 文件。
/SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|
POSIX|WINDOWS)
[,major[.minor]]
其中:
CONSOLE
Win32 字符模式应用程序。 操作系统为各种控制台应用程序提供控制台。 如果为本机代码定义了 main 或 wmain,为托管代码定义了 int main(array<String>),或者完全使用 /clr:safe 构建应用程序,则CONSOLE是默认值。
WINDOWS
应用程序不需要控制台,原因很可能是它会创建自己的窗口来与用户进行交互。 如果为本机代码定义了 WinMain 或 wWinMain,或为托管代码定义了 WinMain(HISTANCE *, HINSTANCE *, char *, int) 或 wWinMain(HINSTANCE *, HINSTANCE *, wchar_t *, int),则 WINDOWS 是默认值。
在 Visual Studio 开发环境中设置此链接器选项:
1.打开项目的“属性页” 对话框。
2.选择链接器文件夹。
3.选择系统属性页。
4.修改SubSystem属性。
(2)/ENTRY : 设置起始地址。
/ENTRY:function
function取值:
功能名称 | 默认值为 |
---|---|
mainCRTStartup (或wmainCRTStartup) | 使用 /subsystem: console; 的应用程序调用main (或wmain )An application that uses /SUBSYSTEM:CONSOLE; calls main (or wmain ) |
WinMainCRTStartup (或wWinMainCRTStartup) | 使用 /SUBSYSTEM 的应用程序:WINDOWS; 调用WinMain (或wWinMain ),必须对其进行定义以使用 __stdcall An application that uses /SUBSYSTEM:WINDOWS; calls WinMain (or wWinMain ), which must be defined to use __stdcall |
_DllMainCRTStartup | DLL;调用DllMain 如果存在,其必须进行定义以使用 __stdcall |
在 Visual Studio 开发环境中设置此链接器选项
1.打开项目的“属性页” 对话框。
2.单击链接器文件夹。
3.单击高级属性页。
4.修改入口点属性。
三 参考