COMインターフェイスのメソッドがBSTR値を返すとします。私はそれを解放しなければならないという私の意見で正しいですか?返されたBSTRを所有しているのは誰ですか?
http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspxのコード例はそうではありません。
誰が間違っていますか?
COMインターフェイスのメソッドがBSTR値を返すとします。私はそれを解放しなければならないという私の意見で正しいですか?返されたBSTRを所有しているのは誰ですか?
http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspxのコード例はそうではありません。
誰が間違っていますか?
MSDNサンプルが間違っています。呼び出し元は、bstrsを解放し、in/outします。それが入っている/出ている場合は、nullまたは有効なbstrを渡す必要があります。それが唯一の場合は、初期化する必要はありません。
msdnのcom allocation rulesからははっきりしませんが、クライアントスタブはout値のメモリをサーバーの呼び出し元の観点から割り当てます。他に誰がそれを呼び出すことができますか?
トニーは正しいですが、私は彼の答えを広げたいと思っていました。状況はBSTRに限られているわけではありません。呼び出し元は、outまたはin/outパラメータを介して返されるメモリを解放する必要があります。
私はいつも 'BSTR'を直接扱うのではなく、' _bstr_t'を使うのが非常に便利だと分かっています。 – wilx
ええ、誰もがVisual Studioに立ち向かうつもりはありません。 –