win32控制台程序隐藏dos黑框

本文介绍了一种解决在Win32控制台程序中调用MFC DLL时隐藏黑框的方法,并详细解释了如何正确设置程序入口点以避免运行时报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天碰到了一个小问题:

在一个win32控制台程序中调用了MFC写的dll,想隐藏其dos黑框,因此从网上找了最常用的隐藏黑框的解决方法:

#pragma comment(linker, "/subsystem:\"windows\" /entry:\"wmainCRTStartup\"" ) // 设置入口地址


具体原理网上也有详细介绍,简言之:

告诉windows系统,此程序的子系统类型为窗口,但是又将其入口点指定为控制台程序的入口点。

那么修改完编译成Release版本后,发现程序启动报错,

幸好Windows在报错时有个提示:是否上报错误信息,从这个错误信息中可以拿到一个dump文件,顺势定位了一下这个dump;

 发现报错代码为:

if (!pThread->InitInstance()) 这一行

其中pThread为NULL ,然后网上继续查找此类错误信息,得到的结论是:

pThread未初始化,而这个的初始化是在CWInApp 类的InitInstance中做的,而CWinApp类是MFC的;

由此推断:

程序的入口点并不是Win32控制台程序的入口点,因此项目属性中程序入口点设置没有成功,遂改成wmainCRTStartup;

改完之后发现编译不过 提示找不到_wmain, 再检查一遍代码发现 在Unicode环境下 main函数应该写成wmain 。

总结:

记住下面这张表(取之于Windows核心编程):

应用程序类型入口点函数嵌入的可执行文件的启动函数
ANSI的GUI程序_tWinMain(WinMain)WinMainCRTStartup
Unicode的GUI程序_tWinMain(wWinmain)wWinMainCRTStartup
ANSI的CUI程序_tmain(Main)mainCRTStartup
Unicode的CUI程序_tmain(Wmain)wmainCRTStartup

这是很基础的Windows编程知识,勿忘!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值