关于动态库中在release下创建资源崩溃的问题。

相信大家在学习动态库(尤其是MFC动态库)的初期,肯定会遇到在DLL中创建资源崩溃的问题。今天小白就遇到了这个问题,搞了好些日子,终于想明白了是怎么回事,顺便来记录一下。

造成这类崩溃错误的原因有很多种,比如,资源切换,ID错乱等。当然这些问题都比较好解决,一般加上

HINSTANCE save_hInstance = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
在每个导出函数的最后加上代码:
AfxSetResourceHandle(save_hInstance);

这些函数,将资源切换一下就会解决。

我这个问题所牵扯的有点乱了,首先说一下我的代码结构:主程序动态加载DLL(MFC规则DLL),DLL中又静态加载DLL(MFC扩展DLL),这个DLL中又加载了静态库LIB。

其次,我这个问题是由于工程设置的问题:由于公司必须要求,使用MFC设置为:1、在共享DLL中使用MFC2、运行库设置为:多线程调试DLL3、Unicode编码。在这个设置中,我没有意识到第二个release和debug下的设置是不一样的。在debug下位多线程调试DLL,在release下为多线程DLL。因此我不小心,在release中也设置成了多线程调试DLL(MDd)。这样子在生成LIB时,系统就会默认产生宏_DUBUG,然后在倒数第二个MFC扩展DLL中,继续错下去....导致release下却定义了_DEBUG宏,导致最后创建资源对话框时,系统运行错乱。导致在release下崩溃。

所以解决办法就是:一定要注意在使用共享DLL中使用MFC时,运行库在debug下为多线程调试DLL,在release下为多线程DLL。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值