qq_37512015
qq_37512015
采纳率31.6%
2018-12-17 02:41

由MFC替换到BCG时,多次界面操作后,系统不响应

程序不响应时,看堆栈是停留在CInitGDIPlus::ReleaseGDIPlus这个函数里,但是整个模块没有CImage类的对象,只有CImagelist对象,且操作时,并未进入含CImagelist的界面。
模块说明:由其他atl模块调用的dll,在析构中调用bcgcleanup没有效果。
想知道怎么能正常退出,谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • jiangsheng 蒋晟 3年前

    所有的CImage对象都应该在堆上创建并且在DLL_PROCESS_DETACH之前销毁。明显bcg没有控制好自己的对象的生命期(大概是依赖于AfxGlobalsRelease),所以如果你要用BCG。就只能用扩展DLL了。

    参考

    • FreeLibrary卡死问题
    • 微软知识库文章322909 FIX: DLL that uses ATL CImage class may cause a deadlock in a process. (没有在线版本,有旧的MSDN光盘的话可以去上面找找)
    点赞 1 评论 复制链接分享
  • qq_37512015 qq_37512015 3年前

    单独替换CComboBox时,不会出现不响应,如果将CComboBox和propertypage,propertysheet同时替换为BCG的,就会出现操作界面退出后,程序整体不响应的情况

    点赞 评论 复制链接分享