MFC 下使用ACE 注意

 

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.
 Data: <      > 00 00 00 00 00 00
{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
    应用程序手动创建ACE_Object_Manager,推荐的方式是在程序开始时调用
    ACE::init(),在结束时调用ACE::fini()。

 

2). 若在文件<ace/config.h>中包括了config-win32.h之后加入以下语句
   #undef ACE_HAS_NONSTATIC_OBJECT_MANAGER
    说明应用程序要使用静态的对象管理器,ACE会为其创建,应用程序无需手动加入。

 

3). 在Win32平台,ACE默认使用非静态的对象管理器,这个对象会被分配在main()函数的stack里;因main()函数已经在MFC类库里定义,故ACE不能使用默认的方法,你可以按2)所说的使用静态的对象管理器,或者按我前面所说的自己定义ACE的初始化函数。


转自http://blog.sina.com.cn/s/blog_4f91596001000c3g.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值