BSTR DoSOmething()
{
return L"";
}
または、BSTR を入力パラメーターとして TCHAR * を API に渡しても問題ありません。
return ステートメントを使用して wchar_t 文字列を BSTR に変換しても問題ありませんか? メモリが破損する可能性はありますか?
BSTR DoSOmething()
{
return L"";
}
または、BSTR を入力パラメーターとして TCHAR * を API に渡しても問題ありません。
return ステートメントを使用して wchar_t 文字列を BSTR に変換しても問題ありませんか? メモリが破損する可能性はありますか?
いいえ、一部の API は単なるWCHAR*
ポインターではなく、長さ情報が添付されBSTR
た実際のポインターを想定しているため、問題ありません。BSTR
この方法でキャストしてもうまくいくことが多く、これは誤解を招く可能性があります。
BSTR に関するすべて: Eric の BSTR セマンティクスの完全ガイド。
そこからの関連する引用:
2) BSTR は、SysAlloc* 関数ファミリーを使用して割り当ておよび解放する必要があります。PWSZ は、スタックからの自動ストレージ バッファーにするか、malloc、new、LocalAlloc、またはその他のメモリ アロケーターで割り当てることができます。
3) BSTR は固定長です。PWSZ は任意の長さにすることができ、そのバッファー内の有効なメモリの量によってのみ制限されます。
4) BSTR は、常にバッファ内の最初の有効な文字を指します。PWSZ は、文字列バッファーの中央または末尾へのポインターである場合があります。