MFC不同dll中对话框的调用问题
来源:互联网 发布:nginx内置变量详解 编辑:程序博客网 时间:2024/05/16 05:52
碰到一个问题,在不同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
时隔多天,又遇见这个问题,还是跨dll调用对话框出问题,特地回来看看博客,之前一直不理解的也突然理解了。
说白了,MFC调用的都是主程序的资源模块,而对话框资源是保存在自己的dll下面的,在主程序的资源文件里是看不到的,所以MFC提供了一个开关,来得到正确的句柄。
PS:如果想在别的类中包含自己新添加的对话框类,则需要把应用程序的主头文件加上,否则会出现 IDD_DIALOG未命名的情况,原因是没有添加#include "Resource.h"
- MFC不同dll中对话框的调用问题
- DLL中对话框的调用问题
- ATL写的DLL中调用MFC对话框
- wpf中调用w32的mfc dll 对话框
- ATL写的DLL中调用MFC对话框
- MFC之dll中调用对话框
- 控制台应用程序调用MFC DLL产生的对话框,解决对话框dlg.DoModal报错问题
- MFC扩展DLL调用对话框,测试的时候报错问题的解决
- MFC调用对话框dll弹出非模态对话框
- VC++MFC 调用DLL里的对话框资源
- 如何调用MFC dll 来显示其中的对话框
- MFC中DLL调用
- MFC中调用DLL
- MFC中调用C#编写的DLL
- 调用mfc扩展型dll使用对话框
- MFC程序调用Dll中的对话框资源
- 【框架-MFC】调用dll中的对话框
- 在MFC “共享MFC 规则DLL”中(创建MFC DLL中选第一个),使用MFC对话框注意问题
- STM32---TIM
- Cas集群中对于tgt使用redis共享的操作
- PHP cookie存放数组
- php钩子和简单的分发方式
- Codeforces #362 div2 prob697 没有题解= =
- MFC不同dll中对话框的调用问题
- 5前期异常捕获
- Spring Batch 整理
- 解决IIS7.5 IIS8下的discuzX3.2伪静态问题
- STL-vector
- Source Insight 3.X 插件支持utf8,完美解决中文乱码,另附优美的配置文件一份
- 协作式多任务操作系统
- DB2操作生产实例
- 用浏览器访问网站很快,但是用curl命令行访问却很慢