负责 COM 互操作中的内存释放

本文关键字:内存 释放 COM 互操作 负责 | 更新日期: 2023-09-27 18:30:42

我正在研究由 .NET dll 提供的C++代码消耗服务,我通过 COM 互操作访问该服务。我正在编写 C++ 和 C# 端。

由 dll 公开并从C++调用的方法之一询问 dll返回包含某些信息的已分配字节数组。在我的 C# 代码中创建该方法后,.tlb 生成器按如下方式公开它:

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

测试表明,当我根据需要发送指针时,我确实分配了缓冲区并填写了我需要的信息,但在这种情况下我不明白 (C#''C++) 是谁的责任来释放此内存以及如何分配。

有什么建议吗?谢谢。

负责 COM 互操作中的内存释放

标准 COM 内存分配规则仍适用于互操作。调用方(使用 C# DLL 的客户端代码)负责释放数组outputBuf(使用 SafeArrayDestroy)。