可以采用_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;
}