CComBSTR,

字符串类型转换总结

这里总结了BSTR, _bstr_t, CComBSTR, CString四种字符串类型之间的转换。其中BSTR为基本数据类型,另三个为字符串类。

首先声明四个类型的变量:

BSTR           strBigBSTR          = ::SysAllocString( _T( "BSTR" ));

_bstr_t         strSmallBSTR( _T( “_bstr_t” ))  ;

CComBSTR strCComBSTR( _T( “CComBSTR” ))

CString          strCString( _T( “CString” ));

       CComBSTR strTempCComBSTR( _T( “TempCComBSTR” ));

 

1.    BSTR to Other Type

BSTR转换为其他类型非常方便,直接使用类的构造函数即可

 

// BSTR to _bstr_t

strSmallBSTR = _bstr_t( strBigBSTR );

 

// BSTR to CComBSTR

strCComBSTR = CComBSTR( strBigBSTR );

 

// BSTR to CString

strCString = CString( strBigBSTR );

 

2.    _bstr_t to Other Type

基本思想是先把_bstr_t转化为TCHAR*, 再转化为其他类型。

 

// _bstr_t to BSTR

strTempCComBSTR = CComBSTR( static_cast<TCHAR*>( strSmallBSTR ));

strBigBSTR = strTempCComBSTR.m_str;

 

// _bstr_t to CComBSTR

strCComBSTR = CComBSTR( static_cast<TCHAR*>( strSmallBSTR ));

 

// _bstr_t to CString

strCString = CString( static_cast<TCHAR*>( strSmallBSTR ));

 

_bstr_t类重载了操作符char*wchar_t*TCHAR*的两种形式),所以这里并不是使用强制转换,而是调用了_bstr_t的函数。

 

3.    CComBSTR to Other Type

基本思想是使用CComBSTR的公有成员变量m_str进行转换。

 

// CComBSTR to BSTR

strBigBSTR = strCComBSTR.m_str;

 

// CComBSTR to _bstr_t

strSmallBSTR = _bstr_t( strCComBSTR.m_str );

 

// CComBSTR to CString

strCString = CString( strCComBSTR.m_str );

 

4.    CString to Other Type

基本思想是先把CString转化为LPCTSTR, 再转化为其他类型。

 

// CString to BSTR

strTempCComBSTR = CComBSTR( static_cast<LPCTSTR>( strCString ));

strBigBSTR = strTempCComBSTR.m_str;

 

// CString to _bstr_t

strSmallBSTR = _bstr_t( static_cast<LPCTSTR>( strCString ));

 

// CString to CComBSTR

strCComBSTR = CComBSTR( static_cast<LPCTSTR>( strCString ));

 

CString类重载了操作符LPCTSTR,所以这里并不是使用强制转换,而是调用了CString的函数。

 

5.    注意事项:

其他类型转化为BSTR类型时都使用的CComBSTR作为中转,因为这样不需要自己释放内存。但是要注意的是,转换后BSTR指向的是CComBSTR的内存,所以一旦CComBSTR被销毁了,BSTR也就失效了,这样会导致不可预知的错误。所以一定要保证CComBSTR大于或等于BSTR的周期。

下面用法是错误的:

strBigBSTR = CComBSTR(( LPCTSTR )strCString ).m_str;

因为CComBSTR在此条语句结束后就被析构了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值