MFC入口点及初始化分析

本文探讨了MFC程序的入口点和初始化过程,详细分析了从PE文件加载到CWinApp构造函数的执行,解释了_AFX_CMDTARGET_GETSTATE()、CWinThread和CWinApp之间的关系,以及如何通过AfxGetApp()获取应用实例并调用InitInstance()函数。

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

写的很随意,这是自己在学习及调试过程的随笔吧,希望能给大家带来一些益处。

 

很多人对于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
}//该处没有任何动作,那么会调用其基类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值