DoModal()函数调用失败的原因分析:
来源:互联网 发布:淘宝个人主页 编辑:程序博客网 时间:2024/05/12 03:45
DoModal()函数调用失败的原因分析:
对话框DoModal()函数调用失败一般而言有两种表现形式:一是对话框弹不出来,但是没有错误提示;二是对话框弹不出来,同时伴随内存访问错误的提示框出现。 第一种表现主要是因为没有对资源句柄进行切换造成的,以在DLL中弹出对话框中最为常见。解决办法是:如果是MFC规则DLL,可以使用所有导出函数的开始处添加 AFX_MANAGE_STATE宏,具体代码为:AFX_MANAGE_STATE(AfxGetStaticModuleState( )),如果是MFC扩展DLL,具体做法是 1. 在DLL中定义两个全局变量, HINSTANCE hResOld; // 旧的资源句柄 HINSTANCE hDll; // DLL资源句柄 2. 在DllMain函数里初始化hDll hDll = hInstance; 3. 在调用对话框DoModal()函数之前进行资源句柄切换 HINSTANCE hResOld = AfxGetResourceHandle(); AfxSetResourceHandle(hDll); …… CYourDlg dlg; dlg.DoModal(); …… AfxSetResourceHandle(hResOld); 若是第二种表现,即对话框弹不出来,同时伴随内存访问错误的提示框出现,那么问题很可能出现在初始化对话框界面的代码方面,具体是在OnInitDialog函数,即使它是在DLL中弹出对话框。事实上在在DLL中弹出对话框如果不进行资源句柄切换,顶多是弹不出对话框,并不会出现内存访问方面的错误。在解决这方面的错误,一个误区是单步进入DoModal()函数调试,直至定位DoModal函数内部哪一句出错。后来我发现这纯粹是浪费时间,就算定位了在DoModal函数内部哪一句出错,你依然不知道为什么会出错。实际上调用DoModal()函数,激发的却是OnInitDialog函数。因此你只需确定OnInitDialog函数哪一句出错了(这里的OnInitDialog函数是指派生对话框类的OnInitDialog函数)。
对话框DoModal()函数调用失败一般而言有两种表现形式:一是对话框弹不出来,但是没有错误提示;二是对话框弹不出来,同时伴随内存访问错误的提示框出现。 第一种表现主要是因为没有对资源句柄进行切换造成的,以在DLL中弹出对话框中最为常见。解决办法是:如果是MFC规则DLL,可以使用所有导出函数的开始处添加 AFX_MANAGE_STATE宏,具体代码为:AFX_MANAGE_STATE(AfxGetStaticModuleState( )),如果是MFC扩展DLL,具体做法是 1. 在DLL中定义两个全局变量, HINSTANCE hResOld; // 旧的资源句柄 HINSTANCE hDll; // DLL资源句柄 2. 在DllMain函数里初始化hDll hDll = hInstance; 3. 在调用对话框DoModal()函数之前进行资源句柄切换 HINSTANCE hResOld = AfxGetResourceHandle(); AfxSetResourceHandle(hDll); …… CYourDlg dlg; dlg.DoModal(); …… AfxSetResourceHandle(hResOld); 若是第二种表现,即对话框弹不出来,同时伴随内存访问错误的提示框出现,那么问题很可能出现在初始化对话框界面的代码方面,具体是在OnInitDialog函数,即使它是在DLL中弹出对话框。事实上在在DLL中弹出对话框如果不进行资源句柄切换,顶多是弹不出对话框,并不会出现内存访问方面的错误。在解决这方面的错误,一个误区是单步进入DoModal()函数调试,直至定位DoModal函数内部哪一句出错。后来我发现这纯粹是浪费时间,就算定位了在DoModal函数内部哪一句出错,你依然不知道为什么会出错。实际上调用DoModal()函数,激发的却是OnInitDialog函数。因此你只需确定OnInitDialog函数哪一句出错了(这里的OnInitDialog函数是指派生对话框类的OnInitDialog函数)。
0 0
- DoModal()函数调用失败的原因分析:
- 关于对话框DoModal()函数调用失败的原因分析
- 关于对话框DoModal()函数调用失败的原因分析
- 关于对话框DoModal()函数调用失败的原因分析(Debug Assertion Failed)
- CDilog::DoModal调用失败,原因分析
- DoModal失败原因
- dll调用失败的原因分析
- 系统调用system失败的原因分析
- fopen函数失败原因分析以及分析原因的方法
- DoModal 函数的用法
- DoModal函数的执行过程
- DoModal函数的一些问题
- DoModal函数的执行过程
- MFC:DoModal 函数的用法
- mmap函数及其映射失败原因分析
- glMultiDrawElementsEXT 或 glMultiDrawElements 调用失败的原因
- jquery ajax 调用失败的原因
- 调用notifyDataSetChanged方法失败的常见原因
- 一元线性回归分析及java实现
- poj 3264 Balanced Lineup(线段树)
- 深入解析Java设计模式之动态代理
- cocos2dx windows phone平台下CCLabelTTF自动换行的实现(2)
- 第十六篇 SDH传送网分层结构
- DoModal()函数调用失败的原因分析:
- SpringMVC 与 MVC的区别
- Win7 + ubuntu14.04 双系统
- 15.动态链接及静态链接
- javascript的全局变量
- 日照看卵巢囊肿哪所醫院最正规
- Github Pages 建立过程记录
- OpenVolumeMesh编译的一些错误解决
- Java回调函数的理解