std::string 转BSTR的方法

可以采用_com_util::ConvertStringToBSTR(str.c_str()); 这种方式进行从string(const char * )到BSTR的转换

这个函数_com_util::ConvertBSTRToString(vtFld.bstrVal); 可以用于将BSTR转换为const char *

若采用vtFld2.bstrVal = _bstr_t(str.c_str());这种方式进行转换,则当str长度大于0x3ffd(16381)时,会引发一个无法捕获的异常,从而导致程序崩溃.具体原因还需要以后仔细研究.

如下是转换的例子:

#include <iostream>
#include <string>
#include<comutil.h>
#pragma comment(lib,"comsuppw")

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])
{
    string str("hello world!");//    string str(16382,'t');   
    _variant_t vtFld;
    vtFld.bstrVal = _com_util::ConvertStringToBSTR(str.c_str());

    string strOut = _com_util::ConvertBSTRToString(vtFld.bstrVal);

    cout<<strOut<<endl; 

    // 如下方式下,若str.size()>//0x3ffd(16381).则会引发一个无法捕获的异常.导致程序崩溃
    string str2(16382,'2');
    _variant_t vtFld2;
    vtFld2.vt = VT_BSTR;
    vtFld2.bstrVal = _bstr_t(str2.c_str());// !!!!!本例子中,此处将发生无法捕获的异常.导致程序崩溃!!!!!!
    string strOut2 = _com_util::ConvertBSTRToString(vtFld2.bstrVal); 
     cout<<strOut2<<endl;

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值