我正在使用函数返回 BSTR 的 Microsoft Kinect SDK。我需要得到一个 QString 或 std::string。
这是我尝试过的:
BSTR bstr = s->NuiUniqueId();
// QString qs((QChar*)bstr, SysStringLen(bstr));
std::wstring ws(bstr);
ui->lblDetails->setText(QString::fromStdWString(ws));
使用此解决方案,程序崩溃。使用注释掉的行,我得到“未解析的外部符号 SysStringLen”。
SysStringLen 是要走的路,但我需要添加一些额外的库(API 不会已经包含它)还是有其他解决方案?
附加问题:微软为什么要这样做?我是说:
#if !defined(_NATIVE_WCHAR_T_DEFINED)
typedef unsigned short WCHAR;
#else
typedef wchar_t WCHAR;
#endif
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
typedef BSTR* LPBSTR;
这样的事情背后的原因是什么?即使他们发现在内部使用它是有益的,他们难道不能在 API 中使用普通的 char 数组或 std::(w)string 来让其他人的生活更轻松吗?