我正在用C++编写一个COM API,并编写一个使用该API的C#程序。我的问题是在将BSTR传递到COM函数时,如何管理BSTR内存。假设我的IDL看起来像:
HRESULT SomeFunction([in] BSTR input);
目前,这个函数的实现方式是这样的:
HRESULT SomeFunction(BSTR input) {
// Do stuff ..., then:
SysFreeString(input);
}
当我在C#中使用类似
SomeFunction(myString)
这样的语句调用它时,C#会生成类似以下的代码(伪代码):myString = SysAllocString("string");
SomeFunction(myString);
或者更确切地说,像这样:
myString = SysAllocString("string");
SomeFunction(myString);
SysFreeString(myString);
也就是说,C#是否会释放生成的BSTR以便于与COM接口进行传递,还是我需要在函数内部释放它?谢谢!