2009-11-06 54 views

答えて

16

は、ちょうどそれをキャストすることはできません:

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

私はプロジェクトがUnicodeであるとき、これは動作するはずだと思います。

+0

おかげNeeul その作業 – subbu

3

Unicode用にコンパイルする場合は、カプセル化されたBSTRをCStringに割り当てます。 ANSI用にコンパイルする場合、変換にWideCharToMultiByte()を使用する必要があります。

また、カプセル化されたBSTRは空の文字列に対応するnullでもかまいません。これを気にかけなければ、あなたのプログラムは未定義の振る舞いをします。

6

CStringにはLPCSTRとLPCWSTRの両方のコンストラクタと代入演算子があるため、WideCharToMultiByteを呼び出す必要はなく、ユニコードモードまたは非ユニコードモードでキャストを間違えることはありません。

あなただけの文字列をこのように割り当てることができます。

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

私は、コード以上のものを含むべきである答えることができます。あなたは何を変えたのですか?なぜあなたはそのようにしたのですか? - レビューより –

関連する問題