私はC++でCOMにAPIを記述しており、このAPIをC#で使用するプログラムも記述しています。私の質問は、BSTRをCOM関数に渡すときのBSTRメモリ管理のセマンティクスに関するものです。私はSomeFunction(myString)
のようなものを持つC#からそれを呼び出すと、C#(COM interop)からCOM関数にBSTRを渡すための規約
HRESULT SomeFunction(BSTR input) {
// Do stuff ..., then:
SysFreeString(input);
}
C#この(擬似コード)のようなものが生成されます:現在、この機能は、次のように実装されている
HRESULT SomeFunction([in] BSTR input);
:私のIDLのように見えると言う
myString = SysAllocString("string");
SomeFunction(myString);
SysFreeString(myString);
:このような
myString = SysAllocString("string");
SomeFunction(myString);
というか
つまり、C#でCOMインターフェイスにマーシャリングするために生成されたBSTRを解放するか、それを自分の関数内で解放する必要がありますか?ありがとう!
この回答は、CLが自動的にinteropのために行うこととは関係がありません。これはOPが尋ねているすべてのことです。 – ildjarn
@ildjarn:逆に、OPの質問に正確に答えます。 –
@ Alf:間違った理由や間違った文脈やリンクで正解を述べるのは本当に「正しい」わけではありません。 – ildjarn