2013-03-25 2 views
3

QStringBSTR으로, 그 반대로 변환하고 싶습니다.QString을 BSTR로 변환하고 그 반대의 경우

std::wstring str_ = QString("some texts").toStdWString(); 
BSTR bstr_ = str_.c_str(); 

BSTRQString로 변환 :

BSTR bstr_; 
wchar_t *str_ = bstr_; 
QString qstring_ = QString::fromWCharArray(str_); 

이 맞

이 내가 QStringBSTR로 변환하려고 무엇인가? 즉, 데이터가 손실됩니까? 그렇다면 올바른 해결책은 무엇입니까?

답변

4

이 경우에는 SysAllocString을 사용해야합니다. BSTR에는 코드에 포함되지 않은 길이 접두어도 포함되어 있습니다. BSTR과 QString 모두에서 모든 내부 데이터 버퍼를 수정해서는 안 그래서 서로 간의 변환, 16 비트 유니 코드 인코딩을 사용 - 여기 손실 아무것도가없는 것보다

std::wstring str_ = QString("some texts").toStdWString(); 
BSTR bstr_ = SysAllocString(str_.c_str()); 

기타.

BSTR bstrTest = SysAllocString(L"ConvertMe"); 
QString qstringTest = QString::fromUtf16(bstrTest); 
2

당신이 단순히 QString::fromUtf16 기능을 사용할 수 QString에 BSTR을 변환하려면 'const를 USHORT에'BSTR '에서 매개 변수 1 변환 할 수 없습니다 * '
+0

내가 오류 C2664을 얻을 : 'QString :: fromUtf16' – parsley72

+0

포함 문제 일 수 있습니다. 을 포함 해보세요. –

+0

아니요, 포함 문제가 아닙니다. http://stackoverflow.com/questions/2395514/is-wchar-t-just-a-typedef-of-unsigned-short -'wchar_t' 포인터 (BSTR typedef)를'ushort' 포인터로 캐스팅해야합니다. QString :: fromUtf16' 기대. 그러나 일부 플랫폼에서는 wchar_t가 ushort보다 오래있을 수 있습니다. 이는 문제를 일으킬 수 있습니다. –

관련 문제