内存泄露:a CDynLinkLibrary object at...的解决
来源:互联网 发布:万网买的域名怎么备案 编辑:程序博客网 时间:2024/06/05 16:58
这两天在设计一个项目,独立了几个DLL模块。昨天勉强把前段工作做完了,需要的DLL也都挂进了EXE文件之中,暗自高兴了一把。不过晚上在看的时候,发现VS2005输出窗口提示有内存泄露:
a CDynLinkLibrary object at...
心里总觉得不爽 L
今天去Google搜索了一下,第一篇是:当您使用多个MFCDLL 报告内存泄漏
http://support.microsoft.com/kb/167929/zh-cn
由于是“注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。”所以没有怎么仔细看。
后来通过注释代码发现,原因可能是因为一个DLL内部使用另一个DLL中的导出类造成的。于是将这两个DLL合并到一个DLL中,再链接到EXE中测试,果然没了J
但是我又不想将这两个DLL合并到一起,因为另一个DLL是“通用”的。我在想,这倒底是什么原因呢?一生气,算了,直接搞个Win32 DLL,也不使用什么MFC DLL。
建立好Win32 DLL之后,拷贝以前DLL中的类到项目,加进去编译。编译器却提示说:什么MFC工程需要MFC DLL支持。再一想,原来是因为以前的MFC DLL向导会默认包含stdafx.h。纯Win32 DLL不需要这个。突然之间,又想到了一个问题:那篇自动翻译的提到了什么UNICODE与ANSI。
原文如下:
与 ANSI (MFC40d.DLL) 的 MFC 版本生成 MFC 应用程序调用 MFC USRDLL, 它与 UNICODE (MFC40Ud.DLL) 的 MFC 版本生成。 MFC 版本使用相同 C 运行时库 (CRT) DLL, MSVCR40d.DLL。 由于 MFC USRDLLs 是框 " 黑色 - ", 应从 ANSI MFC 应用程序调用 UNICODE MFC USRDLL 没有问题。
但是, 以来 (MFC40ud.DLL) UNICODE 和 ANSI (MFC40d.DLL) MFC DLL 都使用同一 CRTDLL, MFC USRDLL 中分配所有对象上报告假内存泄漏。 这是因为 MFC 依靠 CRTDLL 来分配和跟踪所有内存。 它并不分开来自不同版本的 MFC 内存分配。 当 MFC DLL 之一卸载, 它调用 CRT 进行内存转储, 假定所有处于堆是内存泄漏。 但是, 此假定是错误因为有两多份 MFC 内存中。
这有问题么?立马打开所有的DLL项目,
看到突显的这块了么,我的项目中有的DLL使用的是Unicode字符集,有的使用的是多字节字符集。然后将所有的DLL使用多字节字符集进行编译,生成EXE。一看,没了。看来,项目中使用的DLL字符集要保持一致,怪不得有些库会编译出好多版本来,然后在它的包含文件,根据预处理的定义加载“正确”的DLL。
- 内存泄露:a CDynLinkLibrary object at...的解决
- vs2010调试内存泄露 a CMFCVisualManager object at $01481660, 200 bytes long
- highcharts 内存泄露的解决
- 奇怪的内存泄露 incorrect decrement of the reference count of an object that is not owned at this point by
- 解决线程的内存泄露的办法
- 解决ie6内存泄露的问题
- spark内存泄露的问题及解决
- Java内存泄露的理解与解决
- 解决容易出现内存泄露的方法
- 解决IE6内存泄露的另类方法
- Java内存泄露的理解与解决
- Java内存泄露的理解与解决
- Java内存泄露的理解与解决
- Java内存泄露的理解与解决
- cvLoadImage内存泄露问题的解决
- Java内存泄露的理解与解决
- Java内存泄露的理解与解决
- Java内存泄露的理解与解决
- 用c#实现把汉字转换成拼音
- 我经常去的地方
- jQuery1.1 API 中文版 第四部分JavaScript
- ADO.NET 2.0 功能一览
- 电路图:MC34063 2.2V-6V升压到7V电路
- 内存泄露:a CDynLinkLibrary object at...的解决
- 数据提供程序工厂模型
- Cygwin模拟Unix环境攻略,支持vi,g++等命令
- 服务外包不是招商引资
- jQuery1.1 API 中文版 第五部分Effects
- MC34063在扩展后的降压应用
- jQuery1.1 API 中文版 第六部分Events
- UC3844组成的60W开关电源电路
- jQuery1.1 API 中文版 第七部分Ajax