Conver QString到BSTR,反之亦然

Hes*_*dsi 3 windows qt bstr wchar-t wstring

我想转换QStringBSTR反之亦然.

这是我尝试转换QStringBSTR:

std::wstring str_ = QString("some texts").toStdWString();
BSTR bstr_ = str_.c_str();
Run Code Online (Sandbox Code Playgroud)

并转换BSTRQString:

BSTR bstr_;
wchar_t *str_ = bstr_;
QString qstring_ = QString::fromWCharArray(str_);
Run Code Online (Sandbox Code Playgroud)

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

j_k*_*bik 5

你可能应该SysAllocString这样做 - BSTR也包含长度前缀,代码中不包含长度前缀.

std::wstring str_ = QString("some texts").toStdWString();
BSTR bstr_ = SysAllocString(str_.c_str());
Run Code Online (Sandbox Code Playgroud)

除此之外,这里没有任何东西要丢失 - BSTR和QString都使用16位Unicode编码,因此相互之间的转换根本不应该修改内部数据缓冲区.