为什么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,如需转载请自行联系原作者


相关文章
Cesium 获取当前视图范围
Cesium作为一个开源的WebGlobe解决方案已经很牛了,不过因为开发的资料不多,很多功能不知道怎么实现。下面记录下自己获取Cesium当前场景范围的方法(2维中对应的是extent)。   extent其实对我们有用的也就是左上角和右下角坐标,于是首先应该想办法实现的是获取场景左上角和右下角的经纬度坐标。
1755 0
|
监控 持续交付 Docker
使用Docker进行微服务架构的最佳实践
【5月更文挑战第10天】本文探讨了使用Docker实施微服务架构的最佳实践。首先,理解微服务架构是拆分小型独立服务的模式,借助Docker实现快速部署、高可移植性和环境一致性。Docker的优势在于服务扩展、容器编排、自动化构建与部署。最佳实践包括:定义清晰服务边界,使用Dockerfile和Docker Compose自动化构建,利用Docker Swarm或Kubernetes编排,实施服务发现和负载均衡,监控与日志记录,以及持续集成和持续部署。Docker虽重要,但需与其他技术结合以确保系统整体稳定性。
|
传感器 自动驾驶 安全
未来出行的智能革命:自动驾驶技术的现状与前景
在科技迅猛发展的今天,自动驾驶技术正逐步从科幻走进现实。本文将深入探讨自动驾驶的技术原理、当前发展现状以及未来的应用前景。我们将从感知、决策和执行三个核心层面剖析自动驾驶系统的工作机制,并讨论其在不同场景中的应用。同时,通过分析技术发展面临的挑战和瓶颈,我们展望了自动驾驶技术的未来图景,并思考其可能对社会、经济和法律等方面带来的深远影响。
1214 3
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
606 0
|
机器学习/深度学习 人工智能 搜索推荐
谈谈内容创作中的UGC、PGC、AIGC,在创意设计领域的应用与进化
在数字化时代,内容创作经历了从UGC(用户生成内容)到PGC(专业生产内容),再到AIGC(人工智能生成内容)的转变。UGC打破了传统边界,让每个人都能参与创作,但质量参差不齐;PGC代表专业水准,提供高质量内容,但成本高且制作周期长;AIGC借助AI技术大幅提升效率,实现个性化定制,但面临版权、伦理和情感表达的挑战。Adobe国际认证等专业资格成为了衡量设计师能力的新标准,帮助设计师适应这一变革并引领创新。三种模式相互补充,共同推动创意设计领域不断发展。
|
JavaScript UED
Vue.js 中的 `v-if`、`v-else-if` 和 `v-else`:条件渲染详解
Vue.js 中的 `v-if`、`v-else-if` 和 `v-else`:条件渲染详解
645 0
|
Python
如何利用Python下载酷狗音乐
如何利用Python下载酷狗音乐
527 0
|
小程序 安全 前端开发
基于微信小程序的英语单词记忆系统的设计与实现(论文+源码)_kaic
基于微信小程序的英语单词记忆系统的设计与实现(论文+源码)_kaic
|
网络协议 算法 数据库
第一章OSPF协议详解
第一章OSPF协议详解
584 0
|
移动开发 小程序 JavaScript
uniapp中组件库的Textarea 文本域的丰富使用方法
uniapp中组件库的Textarea 文本域的丰富使用方法
741 0