MFC中的winmain

MFC通过在TCHAR.H中定义宏将_winMain替换为WinMain,然后在APPMODUL.CPP中定义_tWinMain,调用AfxWinMain。AfxWinMain在WINMAIN.CPP中实现,负责调用CWinApp的InitApplication和InitInstance进行系统初始化。即使工程未包含APPMODUL.CPP,也会因使用预编译的库和DLL而执行相应流程。

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

不设断点,直接F10调试程序,可以看到:

微软在MFC中是这样隐藏调用WinMain()的:
1.在TCHAR.H文件中定义了一个宏:
#define _tWinMain WinMain
这样MFC源代码在编译的时候,_tWinMain就会被替换为WinMain(),这样操作系统就可以调用了。
2.在APPMODUL.CPP文件中,定义了_tWinMain()
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
看见了吗?里面调用了AfxWinMain(),也就说MFC把对WinMain()的调用转化为对AfxWinMain()的调用,这更加说明,即使在MFC中,也没有什么其它神奇的方法能够跳过或换掉对WinMain()的调用。
3.在WINMAIN.CPP文件中,实现了AfxWinMain()。
AfxWinMain()才实际调用CWinApp->InitApplication()、CWinApp->->InitInstance()完成系统初始化。

那么我的工程没有包含APPMODUL.CPP为什么也会执行呢?
因为在编译时使用的是已经编译好的lib和dll啦
做一个类似的实现。这里用的还是封装main函数

http://www.iamaxiang.cn/wp-content/uploads/2016/12/2016120312114597.zip


源代码中没有一句话,但是程序执行了,并输出aaaa




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值