MFC _tWinMain 是如何被VC链接的
WinMainCRTStartup是会调用WinMain,但是在MFC程序项目中并没有WinMain的定义,只有MFC提供的源代码里面APPMODULE.CPP这个文件中...
WinMainCRTStartup是会调用WinMain,但是在MFC程序项目中并没有WinMain的定义,只有MFC提供的源代码里面APPMODULE.CPP这个文件中有_tWinMain的定义,我的问题是链接器怎么知道要去链接APPMODULE.CPP中的_tWinMain函数呢,我们自己的程序项目中并没有任何地方告诉链接器这个要求啊?
展开
1个回答
展开全部
_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也是必须的
在定义了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也是必须的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询