为什么mfc的入口是InitInstance()而没有WinMain() (转)
2015-04-27 15:47
489 查看
学过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函数进入消息循环。
原文转自 /article/4667433.html
比如初始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函数进入消息循环。
原文转自 /article/4667433.html
相关文章推荐
- 为什么mfc的入口是InitInstance()而没有WinMain()
- 为什么mfc的入口是InitInstance()而没有WinMain()
- 为什么mfc的入口是InitInstance()而没有WinMain()
- MFC程序的启动过程——先全局对象theApp(第一入口),后WinMain(真正入口),会引爆pApp->InitInstance从而创建窗口(程序员入口)
- 为什么mfc中从InitInstance()中进入程序
- MFC中的WinMain()入口去哪里了?
- 作为程序员为什么一直都很努力,却没有进步? .
- 那个和你一起吃路边摊的姑娘为什么没有陪你走到最后
- MFC重写CView的getDocument()函数没有实现多态,只是静态联编
- 为什么没有MMU的处理器无法安装操作系统?
- 为什么java序列化接口没有方法却可以完成序列化
- 在使用Fake framework的时候,为什么有一些函数没有生产mock呢?
- 为什么我新安装的MDaemon V14中文版,没有standard风格?
- 解决为什么提交spark job 在web上没有进度
- java里被封装在jar包里的某个class,由于没有源码,不方便深入调试。为了深入调试,在attach的时候选择源程序,为什么eclipse中右边outline的函数点,.java源文中却没有没有?
- java的main函数为什么没有返回值
- Windows Server 2012 为什么没有“磁盘清理”选项了?
- 我为什么讨厌MFC?
- 中国为什么没有苹果?
- 为什么GOF的23种设计模式里面没有MVC?