为什么mfc的入口是InitInstance()而没有WinMain()

简介:
学过PE文件格式,就明白,程序在进入WinMain之前要做很多事情,
比如初始Dos头,分配函数表,初始化全局变量,之后才进入程序入口(WinMain)

MFC对WindowsAPI进行了封装。在用向导编译成的二进时代码,MFC编译器链接器把源文件编译成PE文件格式存储在磁盘上。

程序执行的时候,从PE文件头开始执行,在进入Winmain函数之前,进行一系列的必备的初始化。

MFC对这一系列的过程进行了封装。提供给编程人员的第一个裸露程序入口就是CWinApp的InitInstance(),其实程序的入口依然是WinMain()函数。

大家都知道,每个程序都有拥有一个进程,每个进程至少有一个线程就是主线程。
CWinThread类是MFC用来封装线程的,这个主线程就是在WinMain函数中创建的,包括UI线程和工作者线程。
因此每个MFC程序至少使用一个CWinThread派生类。被MFC程序员熟知的CWinApp应用类就从这里派生。

InitInstance是CWinThread的一个虚函数,InitInstance就是“初始化实例”的意思 ,可见,它是在实例创建时首先被调用的。
应用程序总要重载这个虚函数,进行系统设置,创建运行环境。例如,主窗口一定要在InitInstance()中创建,因为该函数退出后就进入该线程的消息循环。

MFC执行流程。

_tWinMain(WinMain的别名,用define替换的)-》AfxWinMain->初始化线程,调用InitInstance初始化窗口,调用Run函数进入消息循环。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/greatverve/archive/2011/02/15/mfc-InitInstance.html,如需转载请自行联系原作者


相关文章
|
4月前
|
开发工具
MFC中的WinMain()入口去哪里了?
MFC中的WinMain()入口去哪里了?
|
6月前
|
程序员 Windows
08 MFC - MFC框架中一些重要的函数
08 MFC - MFC框架中一些重要的函数
31 0
|
6月前
04 MFC - 消息映射
04 MFC - 消息映射
23 0
|
3月前
|
C++
MFC创建带窗口的DLL
MFC创建带窗口的DLL
15 0
|
3月前
MFC编写DLL窗口功能代码
MFC编写DLL窗口功能代码
8 0
|
存储 API 数据库
【MFC】MFC基础篇(1)
【MFC】MFC基础篇(1)
【MFC】MFC基础篇(1)
|
编译器 C语言
QT应用编程: Window系统下QT5创建DLL动态库并完成调用
QT应用编程: Window系统下QT5创建DLL动态库并完成调用
330 0
QT应用编程: Window系统下QT5创建DLL动态库并完成调用
|
编译器 C语言 C++
Qt调用VC++生成的动态链接库
Qt调用VC++生成的动态链接库
182 0
MFC创建动态链接库DLL并调用方法详解
实例一: 1、创建一个动态链接库工程,如login_dll。 2、在原工程头文件或者新建头文件如showdlg.h定义动态链接库的导出函数,代码如下: #include "stdafx.h"#define EXPORT __declspec(dllexport)extern "C"  EXPO...
3538 0