关于VS2005中编写DLL的一个异常问题

作者在使用VS2005开发DLL时遇到调试难题,表现为调试过程中触发断点并提示堆损坏错误。通过调整DLL封装方式,包括移除def文件,最终解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天使用VS2005编写了一个Dll,里面封装了一套数据对象,在输出时,由于我想在

Debug和release下都有可编译的版本,因此我在工程中分别做了设置。
在debug下,输出mdo_d.dll,对应的lib文件为mdo_d.lib
在release下,输出mdo.dll,对应的lib文件为mdo.lib

这样在使用时可以根据应用工程的情况进行载入。
#ifdef _DEBUG
#pragma comment ( lib, "mdo_d.lib" )
#else
#pragma comment ( lib, "mdo.lib" )
#endif

但在调试时,出现了一个问题,老是提示下列错误信息:

Windows 已在 DataTrans.exe 中触发一个断点。
其原因可能是堆被损坏,这也说明 DataTrans.exe 中或它所加载的任何 DLL 中有 bug。

郁闷,后来不使用dll封装,直接把源文件加入,这时候工程是正常的。
这就说明是封装的dll上有问题,后来发现了def文件,我在项目中使用AFX_EXT_CLASS对

类进行输出,这个def模块定义文件似乎没有任何用处,而且它在定义输出库的时候,只

能指定一个,不能针对debug和release进行指定,于是我把def文件删除,并在项目属性

的相关配置项中删除了def文件的配置信息。
然后把dll工程重新编译,一切通过。
然后交付使用,哈哈,一切正常!

结论:在使用mfc扩展dll时,一般针对debug和release进行输出,最好把def文件去除。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值