1

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

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

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

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

有什么建议吗?谢谢你。

4

1 回答 1

1

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

于 2013-09-08T14:59:16.853 回答