Windows 将QString转换为BSTR,反之亦然
我想将Windows 将QString转换为BSTR,反之亦然,windows,qt,wchar-t,wstring,bstr,Windows,Qt,Wchar T,Wstring,Bstr,我想将QString转换为BSTR,反之亦然 这就是我试图将QString转换为BSTR: std::wstring str_ = QString("some texts").toStdWString(); BSTR bstr_ = str_.c_str(); 并将BSTR转换为QString: BSTR bstr_; wchar_t *str_ = bstr_; QString qstring_ = QString::fromWCharArray(str_); 这是正确的吗?换句话说,是否
QString
转换为BSTR
,反之亦然
这就是我试图将QString
转换为BSTR
:
std::wstring str_ = QString("some texts").toStdWString();
BSTR bstr_ = str_.c_str();
并将BSTR
转换为QString
:
BSTR bstr_;
wchar_t *str_ = bstr_;
QString qstring_ = QString::fromWCharArray(str_);
这是正确的吗?换句话说,是否有数据丢失?如果是,原因是什么
正确的解决方案 您可能应该使用
SysAllocString
来执行此操作-BSTR还包含长度前缀,这不包括在您的代码中
std::wstring str_ = QString("some texts").toStdWString();
BSTR bstr_ = SysAllocString(str_.c_str());
除此之外,这里没有什么可以丢失的-BSTR和QString都使用16位Unicode编码,因此彼此之间的转换根本不应该修改内部数据缓冲区。要将BSTR转换为QString,只需使用
QString::fromUtf16
函数:
BSTR bstrTest = SysAllocString(L"ConvertMe");
QString qstringTest = QString::fromUtf16(bstrTest);
BSTR字符串由两部分组成:字符串长度为四个字节;以及可以包含空字符的内容 实现这一目标的捷径是:
QString qstr = QString::fromUtf16(reinterpret_cast<ushort*>(bstr));
QString qstr=QString::fromUtf16(重新解释强制转换(bstr));
下一篇有用的文章很好地解释了BSTR字符串
我收到错误C2664:'QString::fromUtf16':无法将参数1从'BSTR'转换为'const ushort*'可能是包含问题。尝试包含。不,这不是包含问题。请参阅-您需要将
wchar\u t
指针(BSTR typedef)强制转换为ushort
指针,该指针是QString::fromUtf16
所期望的。但是请注意,在某些平台上,wchar\t可能比ushort长-这将导致严重的问题。
QString qstr = QString::fromUtf16(reinterpret_cast<ushort*>(bstr));