BOOL InitInstance()为什么说它是程序的进入点?还有,那个WinMain函数又有什么作用,这两个函数之间有什么关系吗?

BOOL InitInstance()是MFC的CWinApp类的成员函数,而WinMain才是真正的入口点,但是MFC不允许程序中有WinMain这个函数,因为MFC自己编写了WinMain函数,如果程序中再定义就重复定义了,而MFC编写的的WinMain函数则调用了CWinApp::InitInstance函数,所以InitInstance看起来似乎就是MFC程序的入口点。

InitInstance是虚函数,继承类必须提供它的实现代码。完成整个消息链的启动。

在CWinApp这个类中除了有一般类都有的构造函数,一个重要的成员函数就是InitInstance,我们知道,在WINDOWS环境下面可以运行同一程序的多个实例,函数InitInstance的作用就是在生成的一个新的实例的时候,完成一些初始化的工作。

Windows允许在同一时刻运行程序的几份拷贝。在概念上,应用程序的初始化可以被分为两个部分:一次性的应用程序初始化工作,这些在应用程序第一次运行时完成,以及实例的初始化工作,每次运行程序的一个拷贝时都会执行这些操作,包括第一次运行时。框架中WinMain实现调用这个函数。重载InitInstance以初始化在Windows下运行的应用程序的每个新实例。

通常,重载InitInstance以构造主窗口对象并设置CWinThread::m_pMainWnd数据成员,使其指向这个窗口。

InitApplication和InitInstance现在成为MFC的CWinApp的两个虚函数,前者负责“每一个程序只做一次”的操作,后者负责“每一个例程都得做一次”的操作。 “每一个程序”指的是进程的概念。“每一个例程”指的是线程的概念。所以InitApplication负责“每一个程序只做一次”的操作。而InitInstance是每一个线程都具有的函数,只不过很多情况下,你自己开的线程没有重载该函数。

其实在基于CWinApp的程序中InitApplication和InitInstance都只执行一次。InitApplication是MFC的较老的入口函数,现在一般不重载InitApplication而直接重载InitInstance。

不过如果使用CWinThread或者AfxBeginThread创建线程,新的线程会执行新建CWinThread对象的InitInsatnce函数一次。不过这和CWinApp没有关系。

InitInstance函数相关推荐

  1. VC InitInstance函数

    VC InitInstance函数 BOOL InitInstance()为什么说它是程序的进入点?还有,那个WinMain函数又有什么作用,这两个函数之间有什么关系吗? BOOL InitInsta ...

  2. MFC中的InitInstance()函数应该怎样理解

    https://zhidao.baidu.com/question/29097884.html

  3. (转)对各种初始化函数的理解:OnInitDialog、InitInstance、InitApplication函数的理解...

    InitInstance和InitApplication 是 APP 类的初始化.而 OnInitDialog 是在 Dialog 类初始化时调用的函数. ★ 应用程序相关配置,一般在InitInst ...

  4. 使用基本的socket函数

    1.socket库的2.2版本的文件: dll文件:ws2_32.dll lib文件:ws2_32.lib 头文件:<WINSOCK2.H> 2.socket库的初始化和卸载 2.1-初始 ...

  5. 孙鑫VC++课程中用到的函数一览

    在许多VC教科书中这些函数/方法.结构.宏等比较常见,觉得比较重要,虽然不用记住,但应该知道,所以列举出来,没写出参数和返回值情况,编写程序时还需仔细查看MSDN文档.本人英语水平较差再加上自己的一些 ...

  6. MFC的Main函数跑哪去了

    用习惯了C的人要看一个程序时首先会想到找到那个main函数在哪,然后再顺着往下看.因为main函数作为程序的入口点,整个程序都是从那开始执行的.当在C++中SDK(win32 API project) ...

  7. javascript 调用C++函数

    分3步: 一>实现IDispatch 接口 #ifndef _IDISPIMP_H_ #define _IDISPIMP_H_// idispimp.h class CImpIDispatch ...

  8. VC++中多线程学习(MFC多线程)一(线程的创建、线程函数如何调用类成员呢?如何调用主对话框的成员?、MFC中的工作线程和界面线程的区别)

    这里废话不多讲了,因为项目原因,需要开启线程进行处理,在不了解线程的情况下,直接百度一下,然后就使用了,结果可想而知,出现了异常,所以花了一天时间系统学习一下多线程,这里主要是针对win32编程方面的 ...

  9. 关于mfc常用系统函数的使用及说明

    1.AfxMessageBox int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 ); int AFX ...

  10. html如何调用js的函数返回值,CDHtmlDialog实现调用html中js函数-江湖宵小-搜狐空间...

    2008-05-05 14:17 1.在APP的InitInstance()函数中加入AfxEnableControlContainer();以支持ole控件: 2.在CDHtmlDialog::On ...

最新文章

  1. java methode_Java Method.getTypeParameters方法代码示例
  2. 边工作边刷题:70天一遍leetcode: day 94-1
  3. sqlserver ADO.net 查询数据库加锁,事务提交
  4. php随机数字不重复使等式成立_当随机数遇上量子
  5. 再聊机器人设计:如何加速开发流程?
  6. c# 指定打开某个路径下的CMD_【自学C#】|| 笔记 25 文件的操作
  7. ElectronNetTest
  8. java变量的声明和数据类型
  9. 数据可视化网页内容自动抓取工具
  10. 无需插件只使用浏览器下载b站视频
  11. 英语简单句——英语句子的基本结构、句子的成分(谓语、主语)、简单句的考点分析
  12. 说唱天王 Eminem 自传《The Way I am》3
  13. 搜索引擎的高级搜索语法指令
  14. Python---爬虫---爬取万余张图片,分门别类
  15. html表ge模板_40多个漂亮的网页表单设计实例
  16. 跨年巨作 13万字 腾讯高工手写JDK源码笔记 带你飙向实战
  17. MyBatis框架的基础用法(增删改查)
  18. 微信朋友圈得内容可以爬取吗?看完这篇你心里就有底了
  19. Arcgis开发系列2 - 修改arcgis infowindow 放大和缩小的模板
  20. Win10 下安装Mathtype6.9 + office2013+EndNote-x8

热门文章

  1. 系统中了莫名奇怪的毒,杀毒软件不起作用了,怎么办
  2. [转载] 非诚勿扰2
  3. 写程序需要做的几件事
  4. 浅析GestureDetector
  5. 对有父子关系的层级数据项,递归实现绑定到ListControl进行树状列表化的分层输出...
  6. 权重尺寸的计算,张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算,以及FC的维度卷积替代方案
  7. 最小二乘方法和RANSAC的改进算法PROSAC和LMEDS
  8. 1.1 矩阵与线性方程组-矩阵的基本运算
  9. 李航教授展望自然语言对话领域:现状与未来
  10. 开发必学的验证码,教你从零写一个验证码