`

/subsystem:windows 与 /subsystem:console

    博客分类:
  • VC
阅读更多

操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相 同。

 

在VC++下,

连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 再调用你自己编写的 main 函数;

对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,WinMainCRTStartup 调用你自己写的 WinMain 函数。

 

而具体设置哪个入口点是由连接器的“/subsystem:”选项参数确定的,它告诉操作系统如何运行编译生成的.EXE文件。

可以指定四种方 式:“CONSOLE|WINDOWS|NATIVE|POSIX”

如果这个选项参数的值为“WINDOWS”,则表示该应用程序运行时不需要控制台,有 关连接器参数选项的详细说明请参考 MSDN 库。  以下四种组合,可以实现console和windows模式的混合,可以达到不弹出DOS窗口的效果,也可以达到在Windows程序中向控制台输出printf信息了。

 

#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )

#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR     lpCmdLine,
int       nCmdShow)
{
     // ... ...
}

int main(void)
{
     // ... ...
}

 

 

 

分享到:
评论
1 楼 whq329 2010-09-21  
又在研究C++了啊

相关推荐

    vc++中 LINK2001错误

    2. 在Project Options中将/subsystem:console改成/subsystem:windows。 二、Console 子系统设置错误 控制台项目要使用Console子系统,而不是Windows,设置错误也会引起LINK2001错误。解决方法是: 1. 打开项目...

    通过设备接口打开设备详细步骤.pdf

    wdm.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"DriverEntry" /subsystem:console/incremental:no /pdb:"MyDriver_Check/GuidOpen.pdb" /debug /machine:I386 /nodefaultlib/out:"MyDriver_Check/...

    VC++常见安装调试错误

    在Project Options中将/subsystem:console改成/subsystem:windows 2. Console子系统设置错误, 提示: LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 控制台项目要使用Console...

    VC6.0编译驱动时的配置

    在Windows操作系统中,设备驱动程序(Device Driver)是连接硬件与操作系统的重要桥梁,它使得操作系统能够控制硬件资源并提供服务。早期的Windows NT操作系统支持两种类型的驱动程序:**NT式驱动**和**WDM(Windows...

    link错误解决办法

    * 在 Project Options 中将 /subsystem:console 改成 /subsystem:windows 2. Console 子系统设置错误 类似于 Windows 子系统设置错误, Console 子系统设置错误也可能会引起 link 错误。例如,LIBCD.lib(wincrt0....

    C++程序控制台的隐藏

    - 为了配合`/SUBSYSTEM:WINDOWS`的设置,需要确保程序的入口函数为`WinMain`而不是`main`。 - 示例代码: ```cpp int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int...

    关于vc6.0连接时的LIBCD.lib问题

    2. 在“Link”选项卡下的“Project Options”区域,将`/subsystem:console`改为`/subsystem:windows`。 3. 保存更改并重新编译项目。 ##### 原因三:Console子系统设置错误 相反的情况也会发生,即当创建的是...

    关于用c语言产生pwm波

    kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/pwm...

    windows下FFTW的安装详解

    /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]] /VERBOSE 3. 生成库文件 在 cmd 中,进入上面的 bin 目录,并运行以下命令: lib /machine:i386 /def:libfftw3-3.def lib /machine:i386 /def:...

    OpenGL 扩展库

    OpenGL扩展库OpenGL扩展库 包含旧版本和新版本; 用法: 1.把*.h拷贝到你的vc的Microsoft Visual Studio\VC98\Include\GL目录下;...#pragma comment(linker, "/subsystem:windows /entry:mainCRTStartup")

    如何使用VC环境编译驱动程序

    6. `/subsystem:console`:设置子系统类型。 7. `/incremental:no`:禁用增量链接。 8. `/pdb:Mydriver_Check/HelloDDK.pdb`:设置PDB文件的名称。 9. `/debug`:开启调试信息。 10. `/machine:I386`:生成适用于386...

    Huffman树的解码与编码

    kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/...

    VC6.0链接错误的一些解决办法

    解决方法是进入项目的属性设置,选择“Link”属性页,在“Project Options”中将`/subsystem:console`更改为`/subsystem:windows`。 2. **Console子系统设置错误**:相反,如果你的项目是一个控制台应用程序,而你...

    C++编译出现的错及修正

    此时,应将项目属性中的“/subsystem:console”更改为“/subsystem:windows”。 3. **Console子系统设置错误** 相反的情况也会发生,即项目被误设为Windows子系统,但代码中使用了`WinMain`作为入口点。错误消息...

    使用VS的lib命令生成def和lib文件1

    - `/SUBSYSTEM`: 设置应用程序的子系统类型,如CONSOLE或WINDOWS。 - `/VERBOSE`: 输出详细信息,帮助调试。 总的来说,通过正确使用Visual Studio的`lib`命令和DEF文件,开发者可以方便地将DLL转换为LIB,从而简化...

    五子棋棋盘设计源代码

    kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/Cpp...

    局域网截包程序源码及说明

    kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib ...oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem...

    用lcc-win32编译C编写的记事本

    命令可能类似于`link main.obj ui.obj fileio.obj /subsystem:console /out:notepad.exe`,其中`/subsystem:console`指定生成控制台应用程序,如果记事本是GUI程序,则应改为`/subsystem:windows`。 4. 运行`notepad...

    取消控制台出现程序,让控制台不出现

    - 寻找“配置属性”->“链接器”->“系统”->“子系统”,并确认其设置为“Windows (/SUBSYSTEM:WINDOWS)”。 - 查看“配置属性”->“C/C++”->“代码生成”->“运行库”,确保它被设置为“多线程DLL”或相应的...

Global site tag (gtag.js) - Google Analytics