2
BSTR DoSOmething()
{
   return L"";
}

または、BSTR を入力パラメーターとして TCHAR * を API に渡しても問題ありません。

return ステートメントを使用して wchar_t 文字列を BSTR に変換しても問題ありませんか? メモリが破損する可能性はありますか?

4

1 に答える 1

5

いいえ、一部の API は単なるWCHAR*ポインターではなく、長さ情報が添付されBSTRた実際のポインターを想定しているため、問題ありません。BSTRこの方法でキャストしてもうまくいくことが多く、これは誤解を招く可能性があります。

BSTR に関するすべて: Eric の BSTR セマンティクスの完全ガイド

そこからの関連する引用:

2) BSTR は、SysAlloc* 関数ファミリーを使用して割り当ておよび解放する必要があります。PWSZ は、スタックからの自動ストレージ バッファーにするか、malloc、new、LocalAlloc、またはその他のメモリ アロケーターで割り当てることができます。

3) BSTR は固定長です。PWSZ は任意の長さにすることができ、そのバッファー内の有効なメモリの量によってのみ制限されます。

4) BSTR は、常にバッファ内の最初の有効な文字を指します。PWSZ は、文字列バッファーの中央または末尾へのポインターである場合があります。

于 2012-09-27T10:47:14.333 に答える