看到同事写的程序,#pragma comment(linker, /subsystem:\windows\ /entry:\mainCRTStartup\ ) 所理解的

news/2024/6/29 12:14:03 标签: linker, windows, null, 编译器, dos, 化工

摘自:http://www.vckbase.com/bbs/prime/viewprime.asp?id=581, 如有侵权,请及时告知。


众所周知,控制台应用程序一般都会显示一个控制台窗口(虚拟DOS窗口),但很多时候控制台程序的执行逻辑根本不需要与用户进行交互,所以显示这个难看的窗口纯属多余,那么如何将它屏蔽掉呢?下面我向大家介绍一种方法。

  操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点实际上是由连接程序设置的,不同的连接器选择的入口函数也不尽相同。在VC下,连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 再调用你自己编写的 main 函数;对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,WinMainCRTStartup 调用你自己写的 WinMain 函数。
具体设置哪个入口点是由连接器的“/subsystem:”选项参数确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方式:“CONSOLE|WINDOWS|NATIVE|POSIX”如果这个选项参数的值为“WINDOWS”,则表示该应用程序运行时不需要控制台,有关连接器参数选项的详细说明请参考 MSDN 库。
下面我们将通过预编译指令来对编译器和连接器进行设置,从而达到我们的目的:例子代码运行后播放Windows系统启动声音三次,然后退出,运行后不会显示控制台窗口。

#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib,"winmm.lib") // 告诉连接器与这个库连接,因为我们要播放多媒体声音
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )  // 设置连接器选项

int main(void)
{
   PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);
   Sleep(50);
   PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);
   Sleep(50);
   PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);
   Sleep(50);

   return 0;
}

在 IDE 环境中新建一个空的控制台程序,将上述代码添加到工程中,编译运行。


http://www.niftyadmin.cn/n/1404335.html

相关文章

WinCE系统USB功能定制

USB的广泛应用就不用多说了&#xff0c;相信目前的各个领域的嵌入式产品中&#xff0c;很少有不用USB的。USB是主从结构的&#xff0c;分为USB Host和USB Slave&#xff0c;从USB1.0&#xff0c;USB1.1到现在的USB2.0&#xff0c;基于USB2.0还有USB OTG&#xff0c;也就是同时支…

effective STL 学习笔记 第二条规范

考虑到有时候不可避免地要从一种容器类型转换到另一种&#xff0c;你可以使用常规的方式来实现转变&#xff1a; 使用封装技术&#xff08;encapsulationg&#xff09;技术&#xff0c;最简单的方式是通过对容器类型使用 类型定义&#xff08;typedef&#xff09;.因此&#x…

WinCE开始菜单中添加应用程序

添加应用程序到WinCE的开始菜单中应该是一个比较常用的功能&#xff0c;在产品定制的时候&#xff0c;添加本产品的应用到StartMenu中&#xff0c;让用户可以方便启动程序&#xff0c;下面就来介绍一下&#xff1a; 先说一下原理&#xff0c;其实在WinCE启动以后&#xff0c;点…

effective STL 读书笔记 二

第九条&#xff1a;慎重选择删除元素的方法。 1. 对于一个连续内存的容器&#xff08;vector &#xff0c; deque&#xff0c; string&#xff09;最好的办法是使用 erase - remove c.erase(remove(c.begin(), c.end(), 1963), c.end()); 2. 对list&#xff0c;这一办法同样适用…

WinCE控制面板添加应用程序

WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的&#xff0c;里面就是包含了一些应用程序。WinCE系统的控制面板由Ctlpnl.exe&#xff0c;Control.exe和一些.cpl文件组成&#xff0c;其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构&#xff0c;而…

逆序的三位数 (10 分) python版

逆序的三位数 (10 分) python版 程序每次读入一个正3位数&#xff0c;然后输出按位逆序的数字。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如输入700&#xff0c;输出应该是7。 输入格式&#xff1a; 每个测试是一个3位的正整数。 输出…

Nsis 学习心得

可以自己制作个性化软件了使用NSNI 增加BrandingText "XXX" 就可以了啊 NSIS 学习心得之BrandingText NSIS 一个优秀的开源安装制作软件&#xff1b;在学习使用过程中碰到了个人的一个问题&#xff1b;就是绑定默认的Nsis system V.只需在这个ShowInstDetails 过…

WINCE启动画面

这段时间在调WINCE的启动画面程序&#xff0c;按着网上说的&#xff0c;先自己制作一幅位图&#xff0c;然后用工具bmp2T.exe转换成数组&#xff0c;把数组拷到/smdk2440/KERNEL/HAL/samsunga_70.c中&#xff08;我用的是三星2440的板子&#xff0c;7寸的屏&#xff09;。最后在…