使用Dll的EXE在关闭时出错一例

10 篇文章 0 订阅
本来,RELEASE版本的Dll搭配Release版本的Exe,Debug版本的Dll搭配Debug版本的Exe是最正常的情形。
不过我测试的结果却正好相反,最正常的情形下Exe关闭时会出错,其它的情形则可以正常关闭EXE。

★UseOfMFC:共享★
【DLL】【EXE】【EXE終了OK?】
RELEASE版RELEASE版() NG
DEBUG版DEBUG版NG
RELEASE版() DEBUG版OK
DEBUG版RELEASE版() OK

★UseOfMFC:动态链接★
【DLL】【EXE】【EXE終了OK?】
RELEASE版RELEASE版() OK
DEBUG版DEBUG版OK
RELEASE版() DEBUG版OK
DEBUG版RELEASE版() OK


在没有找到原因的很长一段时间里,我不得不把EXE的项目配置属性“MFC的使用”(UseOfMFC)改成
“在静态库中使用MFC”,虽然文件大小会变大,不过能正常使用倒也不错。

直到最近,因为调查别的问题而发现了Dll中的ExitInstance函数并没有正常被执行而是中途就莫明地退出了。
详细参见:【 new与delete必须成对使用吗?】  http://blog.csdn.net/mxclxp/article/details/7524116
解决了这个问题后,本文里这个问题也消失了。
原来啊,因为Dll的ExitInstance没有被正常执行,故EXE的ExitInstance中调用afxContextIsDLL宏时出现了Access Violation。
那为什么别的搭配下不会出问题呢?静态链接下因为使用的mfc动态链接库是完全不同的拷贝,故Dll中出现的没有正常
终止ExitInstance的问题不会影响至EXE程序的ExitInstance。共享DLL下,因为mfc90.dll与mfc90d.dll是两个版本,
故交叉搭配使用时也不会引起交叉影响。故此问题只会在最正常使用的情形下出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值