使用COM来编程时得到的那些(BSTR * *)的指针如何释放?

xiaopoy 2012-04-12 02:06:46
例如
IHTMLElement::get_outerHTML(BSTR * *);
IHTMLDocument2::get_URL (BSTR * *);

我用CComBSTR来作为参数,但尤其是获得大串返回值的get_outerHTML,会飞快的造成内存泄露,可以有1个小时100MB的速度。
正规的应该怎么样释放传递回来的BSTR?
...全文
305 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2012-04-12
  • 打赏
  • 举报
回复
SysFreeString() 来释放
WaistCoat05 2012-04-12
  • 打赏
  • 举报
回复
VOID SysFreeString( BSTR bstr );
「已注销」 2012-04-12
  • 打赏
  • 举报
回复 1
[Quote=引用 5 楼 的回复:]

out类型的参数都得你释放

C/C++ code
VOID SysFreeString(
BSTR bstr
);


或者直接用 CComBSTR
C/C++ code
CComBSTR s;
get_outerHTML(&s);
就能自动释放了。
[/Quote]

正解
  • 打赏
  • 举报
回复
out类型的参数都得你释放

VOID SysFreeString(  
BSTR bstr
);

或者直接用 CComBSTR
CComBSTR s;
get_outerHTML(&s);
就能自动释放了。
longgogo 2012-04-12
  • 打赏
  • 举报
回复
这块内存你要怎么用呢,一般都是在这块数据用完之后释放
fishion 2012-04-12
  • 打赏
  • 举报
回复
HRESULT IHTMLElement::get_outerHTML(BSTR *p);
IHTMLDocument2::get_URL(BSTR *p);

我就说,怎么你是两个指针的。。
你可以试试用SysFreeString释放内存吧
ArcRain 2012-04-12
  • 打赏
  • 举报
回复
使用智能指针应该不会有这种问题,检查CComBSTR的作用域以及中途有没有做什么操作指针内存的操作。
向立天 2012-04-12
  • 打赏
  • 举报
回复
如果智能指针造成泄露那就自己申请空间自己管理
mague 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
SysFreeString() 来释放
[/Quote]
这个
xiaopoy 2012-04-12
  • 打赏
  • 举报
回复
CComBSTR s;
get_outerHTML(&s);


现在是用这个的,令人沮丧的是get_Url 占用的内存在一段时间后就不会增长了,但get_outerHTML还是会按照200KB、200KB的速度不断占用下去 :|
现在用保存网页文件的方法来得到网页内容了,但是有没有朋友遇到过这个问题找到其他方法解决了的?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧