【发布时间】:2011-10-25 09:23:40
【问题描述】:
我正在用 C++ 在 COM 中编写 API,并且还在 C# 中编写使用该 API 的程序。我的问题是关于将 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 接口,还是应该在我的函数中释放它?谢谢!
【问题讨论】:
标签: c# c++ com com-interop