BSTR类型

操作系统:windows
    编程工具:MFC
    问题:编的程序里用到了下列语句:
     BSTR bsName;
     pLastNode->get_text(&bsName);//pLastNode为指向结点的指针
    
    程序出现了内存泄漏,经查,是bsName未释放,那BSTR指向的对象该如何释放?(msdn中说明BSTR是32位的指针)
先说说我觉得应该如何做:
    BSTR bsName = NULL;
    pLastNode->get_text(&bsName);//pLastNode为指向结点的指针
    //使用bsName的代码(略)
    ....
    //释放bsName字符串占用的内存
    SysFreeString(bsName);

 

(1)BSTR类型是COM中使用的标准字符串类型。它其实是一个32位指针,保存字符串首字符的地址。既然是指针类型,好的习惯应该是在定义一个BSTR类型变量时立刻初始化为NULL,即使随后立刻就会对其进行赋值。
    (2)pLastNode->get_text(BSTR* pstrText)方法内部为返回的字符串分配了内存资源,并将该字符串的地址bsName变量中。
    (3)外部使用者pLastNode->get_text方法的调用者必须自己调用SysFreeString(BSTR bstr)方法释放BSTR类型字符串占用的资源。
    MSDN中用关于BSTR和其他字符串类型的更详细的叙述。

把BSTR改为CComBSTR,CComBSTR是经过包装的宏,可以自动释放内存。

 

///

 

BSTR、_bstr_t与CComBSTR

CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。

char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据");///使用前需要加上头文件comutil.h

反之可以使用
char *p=_com_util::ConvertBSTRToString(b);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值