ASSERT(m_hWnd == hWndOrig) - 解决之
2013-12-31 08:43
375 查看
该问题产生的原因为:创建类型为regular dll 的MFC dll中的窗口创建与其它DLL或EXE中的窗口创建混乱。
比如:dll1 中函数 fun1() 调用 dll2 中函数 fun2(),在fun2 ()中创建了窗口,但是窗口销毁的时候,又是在dll2中。。或者是其它情况。
查找此类问题的原因就是查看窗口的创建过程,而且创建窗口的函数由谁来调用。
根本原因:
MFC在创建窗口的时候,会使用AfxGetModuleHandle来获取HINSTANCE句柄,而一般在创建窗口的时候, 我们会使用AFX_MANAGE_STATE(AfxGetStaticModuleState())进行将HINSTANCE进行设置,设置成当前的DLL HINSTANCE句柄。所以,如果创建和销毁的时候,不在同一个DLL或EXE中进行,就会产生该问题。
解决方案:
1. 查找窗口创建与销毁函数。
2.了解其创建与销毁函数调用过程。
3.确认其是否在同一个DLL或EXE中调用。
4.如果不在,要修改代码,使之在同一个DLL或EXE中,可以使用AFX_MANAGE_STATE(AfxGetStaticModuleState())进行适当的句柄转换。
比如:dll1 中函数 fun1() 调用 dll2 中函数 fun2(),在fun2 ()中创建了窗口,但是窗口销毁的时候,又是在dll2中。。或者是其它情况。
查找此类问题的原因就是查看窗口的创建过程,而且创建窗口的函数由谁来调用。
根本原因:
MFC在创建窗口的时候,会使用AfxGetModuleHandle来获取HINSTANCE句柄,而一般在创建窗口的时候, 我们会使用AFX_MANAGE_STATE(AfxGetStaticModuleState())进行将HINSTANCE进行设置,设置成当前的DLL HINSTANCE句柄。所以,如果创建和销毁的时候,不在同一个DLL或EXE中进行,就会产生该问题。
解决方案:
1. 查找窗口创建与销毁函数。
2.了解其创建与销毁函数调用过程。
3.确认其是否在同一个DLL或EXE中调用。
4.如果不在,要修改代码,使之在同一个DLL或EXE中,可以使用AFX_MANAGE_STATE(AfxGetStaticModuleState())进行适当的句柄转换。
相关文章推荐
- 注册表重定向
- myPid() 和 myUid() 的区别
- powerdesigner导出脚本细节问题
- Mapr使用数据(三)——配置应用程序
- 结构体的内存对齐问题
- win8应用商店中路径更改的办法
- SAP ABAP 常用函数归纳
- hibernate 注解
- bios 升级后win7无法启动的一个可能原因
- 无线网络密码破解软件BackTrack3+spoonwep2中文包+闪盘制作教程
- mysql的log-bin设置开启失败的原因
- 动画演示10个有趣但毫无用处的Linux命令
- 利用WITH AS 优化FILTER
- 利用WITH AS 优化FILTER
- 这个站是怎样的?
- JSON入门小例子(转)
- Mapr使用数据(二)——来自apache的数据拷贝
- 手把手教你如何破解无线路由密码
- MIS系统开发利器,快速的字典录入解决方案,另类的、可管理的.NET DataWindow 推荐
- 没想到求最小公倍数最大公约束用到的竟然是同余定理,真心学习了~