关于Console程序和win32程序的程序入口
2016-03-17 10:29
302 查看
操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点由连接程序设置, 不同的连接器选择的入口函数也不尽相同。在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) { // ... }
以下四种组合,可以实现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) { // ... }
相关文章推荐
- GLUT教程
- MT MTd MD MDd
- 解决Link 2001错误的一种方法
- 2月份处理钓鱼网站3799个:61.94%使用.com域名
- LightOj 1336 Sigma Function(打表找规律)
- 建立独立的OSG程序
- C++实现单链表
- Linnux命令大全(vim)
- 并行计算--Java--求π并行实现
- Bootstr 分页导航
- [LeetCode]129. Sum Root to Leaf Numbers
- iOS应用崩溃日志分析
- 敏捷测试驱动模式-项目质量保障体系
- linux /sys目录下各个子目录的具体说明
- Redis安装配置
- python网络爬虫入门(二)———模拟登陆知乎
- JDK安装和配置环境
- Betta
- Java内部类、本地类、匿名类、文件类解读
- 解析posix与perl标准的正则表达式区别