我正在研究一个C ++代码,它正在使用.NET dll提供的服务,我正在通过COM Interop访问它。我正在编写C ++和C#方面。
dll公开的方法之一,从C ++调用,请求dll 返回包含一些信息的已分配字节数组。在我的C#代码中创建该方法后,.tlb生成器将其暴露如下:
HRESULT _stdcall DownloadData(
[out] SAFEARRAY(unsigned char)* outputBuf);
测试表明,当我根据需要发送指针时,我确实得到了缓冲区 并填写了我需要的信息,但我不明白在这种情况下,它的责任是(C#\ C ++)解除分配这个记忆以及如何。
有什么建议吗?谢谢。
答案 0 :(得分:1)
标准COM memory allocation rules仍然适用于互操作。调用者(使用C#DLL的客户端代码)负责释放outputBuf
数组(使用SafeArrayDestroy)。