COM Interop中内存释放的责任

时间:2013-09-08 01:54:38

标签: c# c++ com com-interop safearray

我正在研究一个C ++代码,它正在使用.NET dll提供的服务,我正在通过COM Interop访问它。我正在编写C ++和C#方面。

dll公开的方法之一,从C ++调用,请求dll 返回包含一些信息的已分配字节数组。在我的C#代码中创建该方法后,.tlb生成器将其暴露如下:

HRESULT _stdcall DownloadData(
                        [out] SAFEARRAY(unsigned char)* outputBuf);

测试表明,当我根据需要发送指针时,我确实得到了缓冲区 并填写了我需要的信息,但我不明白在这种情况下,它的责任是(C#\ C ++)解除分配这个记忆以及如何。

有什么建议吗?谢谢。

1 个答案:

答案 0 :(得分:1)

标准COM memory allocation rules仍然适用于互操作。调用者(使用C#DLL的客户端代码)负责释放outputBuf数组(使用SafeArrayDestroy)。