碰到一个问题,在不同dll中对话框的调用一直报错,调试发现在OnInitDialog()的时候系统死掉,网上一查才知道还是MFC了解的太少。
网上提供了2种方法,一是将DLL编译成静态链接,即通过更改项目属性-配置属性-常规-MFC的使用中更改,这个我直接pass了,因为我觉得都是本机测试,不会是因为这个
问题,第二种方法是在定义对话框之前加上:
AFX_MANAGE_STATE(AfxGetStaticModuleState())
AFX_MANAGE_STATE字面理解就是管理某种状态,而括号里的就是获取某种静态的模块状态,在MFC中,States用来保存某种相关的状态信息,例如:
1:Process State 和某个单独的进程绑定起来
2:Thread State 和某个单独的线程绑定
3: Module State 和Module相关
前两种State和一般的全局变量十分类似, 只是根据需求的不同被绑定于不同的进程或者线程,如多线程支持等。而Module State本身比较特别,Module State根据情况的不同,可以是全局 、线程、或者进程相关的State,并且可以根据要求快速切换。
百度百科上定义说调用AFX_MANAGE_STATE(AfxGetStaticModuleState());是用来设置先前初始化和/或回复先前清理后的模块状态。默认情况下,MFC使用资源处理的主要应用程序加载资源模块,比如启动另一个DLL中的对话框,这个模块实际上是存储在dll中的,这就需要开关模块状态来正确使用它。
20170408</