Conver QString到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_); 

它是否正确? 换句话说,有没有数据丢失? 如果是,那么正确的解决scheme是什么?

您应该使用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);