COM中的OLECHAR ,BSTR和CComBSTR 的理解和应用

 

                   COM中的OLECHAR ,BSTR和CComBSTR  的理解和应用

 

1.         OLECHAR  

  一般COM中用OLECHAR来表示字符,如果在win32系统中,OLECHAR就是 wcahr_t

  如果是在win16系统中,那么OLECHAR就是 char

 

  

2.        BSTR

BSTR是带有字符串长度信息的以NULL结尾的一个OLECHAR数组。

 

1BSTR的创建:  SysAllocString,也就是说,BSTR的创建只能通过SysAllocString的返回值来得到。不要通过其他的方法来对BSTR进行赋值。

 

BSTR SysAllocString(   const OLECHAR *  sz  );

 

2BSTR的销毁:SysFreeString

VOID SysFreeString( BSTR  bstr  );

 

调用了SysAllocString后,一定要调用SysFreeString进行释放,否则会导致内存泄露。

 

3.        CComBSTR

CComBSTRCOMBSTR的封装。

它不需要手动去管理BSTR字符串的申请和释放。

 

(1)       构造函数

可以接受一个LPCOLESTR的指针

可以接受一个LPCSTR的指针

也可以接受一个 CComBSTR

 

 

(2)       赋值函数

可以接受一个LPCOLESTR的指针

可以接受一个LPCSTR的指针

也可以接受一个 CComBSTR

 

(3)    Copy函数

      返回一个 BSTR

 

      CopyTo函数

      将内部的BSTR拷贝到指定的BSTR,同时内部的BSTR继续保留,不会被销毁。

 

(4)    Attach 函数

      将一个BSTR赋值给CComBSTR,但是如果CComBSTRm_str成员不为NULL,那么先释放老的BSTR,在创建新的BSTR

 

 

5  Detach函数

     返回CComBSTR内部的BSTR  m_str成员,将这个内部的BSTRCComBSTR分离。

     分离后,这个BSTR就不再会被CComBSTR所自动释放空间,必须用SysFreeString手动释放,否则会内存泄露。

 

(6)   AppendBSTR函数

     将一个BSTR赋值给CComBSTR,其中其中可以包含NULL,而其他的赋值操作比如:Append则会被中间包含的NULL截断。所以一般将BSTR赋值给CComBSTR都用AppendBSTR函数。

 

(7)特别注意:编译器不能分辨LPCOLESTR(即 OLECHAR*)和 BSTR,但是一般BSTR包含有长度信息,而且不是用NULL来表示

   结尾的,所以这两种类型最好不要互相传递,否则很容易导致麻烦。

 

 

 

 

 

                      

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值