MFC _tWinMain 是如何被VC链接的

WinMainCRTStartup是会调用WinMain,但是在MFC程序项目中并没有WinMain的定义,只有MFC提供的源代码里面APPMODULE.CPP这个文件中... WinMainCRTStartup是会调用WinMain,但是在MFC程序项目中并没有WinMain的定义,只有MFC提供的源代码里面APPMODULE.CPP这个文件中有_tWinMain的定义,我的问题是链接器怎么知道要去链接APPMODULE.CPP中的_tWinMain函数呢,我们自己的程序项目中并没有任何地方告诉链接器这个要求啊? 展开
 我来答
eee2356eee
2010-04-22 · TA获得超过1139个赞
知道小有建树答主
回答量:389
采纳率:0%
帮助的人:606万
展开全部
_tWinMain 实际是一个宏

在定义了UNICODE和_UNICODE宏(即默认Unicode编码支持)之后,是wWinMain(vc 8+默认)
没有的话是WinMain(vc6 默认)

WinMain实际就是一个入口点,和main的含义是一样的,这主要来源于vc对基于win32的本地支持

至于怎么连接,这和main是一个道理。其实main本身也只是一个普通函数,只不过被C++ CRT指定为入口函数而已

##############################################################
楼主喜欢刨根问底呀,呵呵
这涉及到编译和连接两部分
编译阶段,编译器(cl.exe)只是以源文件为个体,分析其语法,并编译为机器指令,这个过程不包括连接,也就是说编译器不理会有没有入口函数

编译之后,要链接为可执行文件,这个过程连接器(link.exe)才会查找入口函数,如果没有,连接器会报错

你可以看看mfc的头文件,其中有请求连接器连接mfc的lib文件的预编译指令,为#pragma link(lib,""),具体的会根据你的MFC项目设置,连接不同的lib文件

理清了这些,你会知道,vc是附带编译好的mfc lib文件的,因为mfc封装了入口函数WinMain,所以在连接期间,连接器可以找到mfc中的入口函数,这也就是为什么vc的mfc项目中是看不到WinMain的原因

如果你不使用MFC,而直接使用sdk手写win32项目,那么就像main函数,WinMain也是必须的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式