2
我正在使用Microsoft Kinect SDK,其中函數返回BSTR。我需要得到一個QString或std :: string。爲什麼BSTR以及如何將其轉換爲QString?
這是我已經試過:
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)字符串來讓其他人的生活更輕鬆?
謝謝。我仍然有段錯誤,但轉換工作。我剛纔在微軟的參考文獻中發現,我一直在使用的方法的描述是「不要使用」......仍然懷疑所有的typedefs。 – jaho
COM是一個有趣的有趣的世界:-) –
嗯,仍然是一個segfault與下面的代碼,這次,一個工作函數: BSTR bstr = s-> NuiDeviceConnectionId(); char * p = const_cast(_com_util :: ConvertBSTRToString(bstr)); QString * qs = new QString(p); ui-> lblDetails-> setText(* qs); –
jaho