zoukankan      html  css  js  c++  java
  • ASSERT(m_hWnd == hWndOrig)

    该问题产生的原因为:创建类型为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())进行适当的句柄转换。

  • 相关阅读:
    增加路由的方法
    常见问题代码
    统计用
    json格式,但是不要unicode编码
    查看有没有安装ssh服务器端
    Unity3D写雷电游戏(二)
    MFC+Flash图片浏览器
    HGE做的俄罗斯方块
    原来C语言没有重载。。。
    随机生成路径
  • 原文地址:https://www.cnblogs.com/lin1270/p/3498728.html
Copyright © 2011-2022 走看看