【发布时间】:2026-01-06 18:55:01
【问题描述】:
我有一个大类,在很多地方我需要将数组转换为 intPtr
IntPtr convertToIntPtr(Array input)
{
if (input != null)
{
int s = Marshal.SizeOf(input.GetValue(0).GetType()) * input.Length;
System.IntPtr p = Marshal.AllocHGlobal(s);
return p;
}
return new IntPtr();
}
我知道可以使用Marshal.FreeHGlobal(IntPtr) 释放每个指针。
我的问题是: - 将garbagecollector免费intptr一旦使用 - 如果没有,我怎样才能在关闭或处置类时释放所有这些,任何要使用的事件,以便当 intpntr 没有远被删除时
【问题讨论】:
-
为什么需要非托管内存?也许你没有
-
包装它,从SafeBuffer 派生一个类。喜欢this。
-
@DavidHeffernan 不幸的是我使用需要 intptr 的 3D Dlls
-
不一定。只有当他们引用您的数据时。也许你只需要传递
double[]。