在MFC DLL中为什么我必须使用“CWinApp theApp;”声明应用程序,否则它将发生运行时异常。当App被实例化时?
答案 0 :(得分:4)
[来自MSDN]
theApp是应用程序对象。构造其他C ++全局对象时构造此对象,并且在Windows调用WinMain函数时该对象应该已经可用。并且有必要在全局级别声明您的对象。
应用程序启动 - 当用户启动应用程序时,Windows会调用应用程序框架的内置WinMain函数,WinMain会查找从CWinApp派生的类的全局构造的应用程序对象。不要忘记,在C ++程序中,全局对象是在执行主程序之前构造的。
CMyApp :: InitInstance 成员函数 - 当WinMain函数找到应用程序对象时,它调用虚拟InitInstance成员函数,该函数进行构造和显示应用程序主框架窗口所需的调用。您必须在派生的应用程序类中重写InitInstance,因为CWinApp基类不知道您想要什么类型的主框架窗口。
CWinApp :: Run 成员函数 - Run函数隐藏在基类中,但它将应用程序的消息调度到其窗口,从而使应用程序保持运行。 WinMain调用InitInstance后调用Run。