関数が 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 にはまだ含まれていません)、または別の解決策はありますか?
追加の質問: Microsoft はなぜそれを行うのですか? つまり:
#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 を使用して、他の人の生活を楽にすることはできませんか?