在C#中使用Marshal类中的Marshal.FreeHGlobal方法释放由C++ DLL返回的指向堆上存储的数组的指针。
以下是一个示例代码:
// C++ DLL
函数
的声明
__declspec(dllexport) int* getCIntArray(int n);
// C#
调用
C++ DLL
函数
获取数组指针
[DllImport("MyDll.dll")]
public static extern IntPtr getCIntArray(int n);
// 在C#中释放指针
IntPtr intPtr = getCIntArray(10); // 获取指向堆上存储的整数数组的指针
Marshal.FreeHGlobal(intPtr); // 释放指针
需要注意的是,在
调用
Marshal.FreeHGlobal方法之前,需要先在C++ DLL
函数
中释放存储在堆上的数组。例如:
// C++ DLL
函数
的实现
int* getCIntArray(int n)
int* intArray = new int[n]; // 在堆上分配存储空间
return intArray; // 返回指向堆上存储的整数数组的指针
在C++ DLL
函数
中,我们使用new运算符在堆上分配内存空间来存储整数数组,返回一个指向这个数组的指针。在C#中获取这个指针后,使用Marshal.FreeHGlobal方法释放指针,从而释放内存空间。