进程外服务器的事件回调内存泄漏, 我哪儿错了?

xuting 2002-11-10 02:41:53
我的程序是一个server.exe 和一个client.exe,
server.exe是VC.net下用ATL写的一个Free Thread Model的COM服务器程序,
client.exe是C++ Builder 6写的客户程序, 在C++ Builder里用import typelib
把server.exe注册的接口引入, 包装成TServer组件, client.exe在Form上加入
这个组件.

server.exe里的若干个线程会通过事件接口不断通知client.exe,
代码是用了VC.net引入的关键字 "__raise",如下:
比如:
void Fire_Event1( CStringW msg )
{
_bstr_t s(msg);
__raise OnEvent1( s );
}
void Fire_Event2( CStringW msg )
{
_bstr_t s(msg);
__raise OnEvent2( s );
}
程序运行后,没有错误,client.exe中正常显示事件发生收到的消息,
但是随着事件不断调用,server.exe和client.exe的内存消耗都会越来越多,
直到最后耗光内存.如果在server.exe中去掉对Fire_EventX()的调用,
则内存泄漏的现象就不会发生.
到底问题出在什么地方呢?我觉得我的代码没有什么毛病阿
...全文
17 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hyonghyong 2002-11-11
可能不是Fire_EventX()的问题。
将server.exe中的Fire_EventX()函数不用参数试试。
  • 打赏
  • 举报
回复
skg 2002-11-11
用工具看看吧,BoundsChecker
  • 打赏
  • 举报
回复
xuting 2002-11-10
_bstr_t 是一个类,会在析构函数中调用::SysFreeString()的,
不应该是这里的泄漏,而且,我的client.exe和server.exe同时都会
内存泄漏,

按说,client.exe中的事件就是 TServerEvent1( BSTR msg ),
msg也不需要由自己释放, 可是即使我释放msg,内存泄漏还是发生,
真搞不懂.如下:
TMainForm::TServerEvent1( BSTR msg )
{
AnsiString MsgString( msg );
::SysFreeString( msg );
TestEdit->Lines->Add( MsgString );
}
  • 打赏
  • 举报
回复
hyonghyong 2002-11-10


void Fire_Event1( CStringW msg )
{
_bstr_t s(msg);
__raise OnEvent1( s );
}
void Fire_Event2( CStringW msg )
{
_bstr_t s(msg);
__raise OnEvent2( s );
}

函数中的_bstr_t变量要释放;
  • 打赏
  • 举报
回复
相关推荐
发帖
ATL
加入

3231

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
申请成为版主
帖子事件
创建了帖子
2002-11-10 02:41
社区公告
暂无公告