14

私には_bstr_t変数がbstrErrあり、変数がありCStringますcsError。に入る値を設定するにはどうすればよいbstrErrですcsErrorか?

4

5 に答える 5

20

キャストするだけでは不可能ですか:

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

プロジェクトがUnicodeの場合、これはうまくいくはずです。

于 2009-11-06T06:39:36.967 に答える
7

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

この方法で文字列を割り当てることができます:

csError = bstrErr.GetBSTR();

または、コンストラクタ CString csError( bstrErr.GetBSTR() ); を使用します。

GetBSTR を使用しています。(LPCWSTR) で bstrErr をキャストするのと同じことですが、私は読みやすさのためにそれを好みます。

于 2009-11-17T04:49:41.523 に答える
3

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

また、カプセル化されたBSTRは、空の文字列に対応するnullになる可能性があることに注意してください。これに注意を払わないと、プログラムは未定義の動作に遭遇します。

于 2009-11-06T06:43:04.947 に答える