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

来源:互联网 发布:淘宝如何银联在线支付 编辑:程序博客网 时间:2024/05/16 07:23

这两天使用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文件去除。