内存泄露:a CDynLinkLibrary object at...的解决

这两天在设计一个项目,独立了几个DLL模块。昨天勉强把前段工做作完了,须要的DLL也都挂进了EXE文件之中,暗自高兴了一把。不过晚上在看的时候,发现VS2005输出窗口提示有内存泄露:php

a CDynLinkLibrary object at...测试

内心总以为不爽 Lspa

 

今天去Google搜索了一下,第一篇是:当您使用多个MFCDLL 报告内存泄漏翻译

http://support.microsoft.com/kb/167929/zh-cn设计

因为是“注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。”因此没有怎么仔细看。code

 

后来经过注释代码发现,缘由多是由于一个DLL内部使用另外一个DLL中的导出类形成的。因而将这两个DLL合并到一个DLL中,再连接到EXE中测试,果真没了J对象

 

可是我又不想将这两个DLL合并到一块儿,由于另外一个DLL是“通用”的。我在想,这倒底是什么缘由呢?一辈子气,算了,直接搞个Win32 DLL,也不使用什么MFC DLLblog

创建好Win32 DLL以后,拷贝之前DLL中的类到项目,加进去编译。编译器却提示说:什么MFC工程须要MFC DLL支持。再一想,原来是由于之前的MFC DLL向导会默认包含stdafx.h。纯Win32 DLL不须要这个。忽然之间,又想到了一个问题:那篇自动翻译的提到了什么UNICODEANSI内存

 

原文以下:get

 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

相关文章
相关标签/搜索