2009-11-06 74 views

回答

16

是沒可能只投它:

_bstr_t b("Steve"); 
CString cs; 
cs = (LPCTSTR) b; 

我認爲,當該項目是Unicode這應該工作。

+0

感謝Neeul 其工作 – subbu 2009-11-06 06:43:22

3

如果您編譯爲Unicode - 只需將封裝的BSTR分配給CString。如果您爲ANSI編譯,則必須使用WideCharToMultiByte()進行轉換。

另外要注意,被封裝的BSTR可以是null,它對應於一個空字符串。如果你不處理這個問題,你的程序將會遇到未定義的行爲。

6

CString有LPCSTR和LPCWSTR的構造器和賦值操作符,因此永遠不需要調用WideCharToMultiByte,並且無法在unicode或非unicode模式下投射錯誤。

您可以用這種方式只分配字符串:

csError = bstrErr.GetBSTR();

或使用構造函數 CString csError(bstrErr.GetBSTR());

我正在使用GetBSTR。這與使用(LPCWSTR)投射bstrErr是一樣的,但我更喜歡它的可讀性。

0
BSTR myBSTRVal; 
CString BSTRasCString("") 
char szValue[MAX_PATH] = ""; 

// This will map the BSTR to a new character string (szValue) 
WideCharToMultiByte(CP_ACP, 0, myBSTRVal, -1, szValue, sizeof(szValue), NULL, 
NULL); 
BSTRasCString.Format("%s", szValue);     
BSTRasCString.TrimLeft(); 
BSTRasCString.TrimRight(); 
+1

我可以回答應該不僅僅包括代碼的。你改變/做了什麼?你爲什麼這樣做? - 來自評論 – 2017-08-15 16:00:30