在C ++中使用COM时,字符串通常是BSTR
数据类型。有人可以使用BSTR
包装纸CComBSTR
或MS的包装纸CString
。但是因为我不能在MinGW编译器中使用ATL或MFC,是否有标准代码片段可以转换BSTR
为std::string
(或std::wstring
),反之亦然?
是否还有一些非MS包装BSTR
类似于CComBSTR
?
更新资料
感谢所有以任何方式帮助我的人!仅仅因为没有人解决过BSTR
和之间的转换问题std::string
,所以我想在此提供一些实现方法的线索。
以下是我用来分别转换BSTR
为std::string
和的函数:std::string
BSTR
std::string ConvertBSTRToMBS(BSTR bstr)
{
int wslen = ::SysStringLen(bstr);
return ConvertWCSToMBS((wchar_t*)bstr, wslen);
}
std::string ConvertWCSToMBS(const wchar_t* pstr, long wslen)
{
int len = ::WideCharToMultiByte(CP_ACP, 0, pstr, wslen, NULL, 0, NULL, NULL);
std::string dblstr(len, '\0');
len = ::WideCharToMultiByte(CP_ACP, 0 /* no flags */,
pstr, wslen /* not necessary NULL-terminated */,
&dblstr[0], len,
NULL, NULL /* no default char */);
return dblstr;
}
BSTR ConvertMBSToBSTR(const std::string& str)
{
int wslen = ::MultiByteToWideChar(CP_ACP, 0 /* no flags */,
str.data(), str.length(),
NULL, 0);
BSTR wsdata = ::SysAllocStringLen(NULL, wslen);
::MultiByteToWideChar(CP_ACP, 0 /* no flags */,
str.data(), str.length(),
wsdata, wslen);
return wsdata;
}
std::string
而不是std::wstring
Windows的原因吗?