1. 将下列内容输入到文件<ace/config.h>中:
//use MFC library
#define ACE_HAS_MFC 1
//use standard C++ library
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
//define this, the application must create the ACE_Object_Manager.
//The recommended way is to call <ACE::init> at the start of
//the program, and call <ACE::fini> at the end.
#define ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER
#include "ace/config-win32.h"
2. 在CWinApp的派生类的构造函数或InitInstance()函数中加入ACE的初始化函数
ACE::init(),在该派生类的析构函数中加入ACE的清理函数ACE::fini()。
3. 若运行时还检测到有内存泄漏,其输出信息如下:
Detected memory leaks!
Dumping objects ->
{148} normal block at 0x003EBD90, 6 bytes long.
{61} client block at 0x003E3298, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003E3298, 64 bytes long
a CDynLinkLibrary object at $003E3298, 64 bytes long
Object dump complete.
这种现象一般是由于ACE库和应用程序的字符集不一致所造成的,ACE在VS2005项目
选项中的字符集设置是“未设置”,可将其设成“使用Unicode字符集”(注:VS2005默认的字符集设置是“使用Unicode字符集”)
4. 几点说明:
1). ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER
2). 若在文件<ace/config.h>中包括了config-win32.h之后加入以下语句
3). 在Win32平台,ACE默认使用非静态的对象管理器,这个对象会被分配在main()函数的stack里;因main()函数已经在MFC类库里定义,故ACE不能使用默认的方法,你可以按2)所说的使用静态的对象管理器,或者按我前面所说的自己定义ACE的初始化函数。
转自http://blog.sina.com.cn/s/blog_4f91596001000c3g.html