当前位置:C++技术网 > 资讯 > 用_bstr_t类实现string和BSTR类型的相互转换

用_bstr_t类实现string和BSTR类型的相互转换

更新时间:2016-10-14 10:34:06浏览次数:1+次

    先来看看string和BSTR类型的互换的效果图:
用_bstr_t类实现string和BSTR类型的互换
    这是string和BSTR类型的互换的实现代码:
#include <iostream>
using namespace std;
#include "comutil.h"
void main()
{
    string str="这是一个字符串";
    BSTR bstr = (_bstr_t)str.c_str();//string转到BSTR
    string str2 = (_bstr_t)bstr;//BSTR转到string
}

    图为调试运行状态跟踪的每一个变量的值,可以看到,str、bstr和str2的值都是“这是一个字符串”,说明互换是成功的。
    _bstr_t是一个类,不是基本类型。_bstr_t声明定义于头文件comutil.h。你可以进去头文件看看_bstr_t类的实现。这样可以更加深入的了解_bstr_t类。
    使用强制转换方式实现类型互转,会生成临时的变量,然后变成对应的类型,再被赋值。
BSTR bstr = (_bstr_t)str.c_str();//string转到BSTR

    为什么不是直接用string做强制转换,而是要用string的c_str()取到C字符串呢?我们可以看看_bstr_t对构造函数和赋值操作符的重载实现:
//_bstr_t类构造函数
_bstr_t() throw();
_bstr_t(const _bstr_t& s) throw();
_bstr_t(const char* s) ;
_bstr_t(const wchar_t* s) ;
_bstr_t(const _variant_t& var) ;
_bstr_t(BSTR bstr, bool fCopy) ;
//_bstr_t的赋值操作符重载
_bstr_t& operator=(const _bstr_t& s) throw();
_bstr_t& operator=(const char* s) ;
_bstr_t& operator=(const wchar_t* s) ;
_bstr_t& operator=(const _variant_t& var) ;

    你可以从这里的实现发现,这里并没有对string的支持,而是最基础的char*的支持。其实想想也是很正常的,因为char*是最基础的,各种环境都通用,这样只要不同的环境转到char*就可以互通互用了。string也就是通过c_str成员函数转到了char*。这就是为什么代码中使用string的c_str作转换的原因。
    使用char*作为基础的类型支持,可以实现跨语言跨环境的字符串类型转换,这是非常普遍的做法。