写的很随意,这是自己在学习及调试过程的随笔吧,希望能给大家带来一些益处。
很多人对于MFC的入口点及初始化很迷茫,从而导致学习MFC的畏惧心理(当初和我一起学习的3~4个人基本都放弃了),但愿这篇文章给你以启示。
很多人在大学的时候,都被教会程序的入口点是main()函数。但是在main()函数之前有什么操作呢?
这个问题涉及到了程序的加载流程。程序的加载流程大致如下:
加载PE文件的.idata段---->加载PE文件的.data段---->加载代码.text段---->然后执行程序。
.idata是PE文件的引入段。PE文件对外部符号的调用在这里做中转。
.date是PE文件数据段(存放全局的变量)。
.test是PE文件的代码段。
而对于C++程序来说,如果定义了全局的对象,则要调用该对象类的构造函数。
该对象为全局对象,那么该对象将在.data中定义,因此按照加载流程,会在进入入口点之前先调用该对象类的构造函数。
下面来分析下MFC的入口点。
我使用VC6.0新建了一个单文档的工程:MY
在MY.CPP中有一个全局对象CMYApp theApp;
按照上边的分析,会调用该对象的构造函数:
CMYApp::CMYApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}//该处没有任何动作,那么会调用其基类