我有一个外部方法,它接收一些参数,分配内存并返回一个指针。如何固定'非托管'指针?
[DllImport("some.dll", CallingConvention = CvInvoke.CvCallingConvention)]
public static extern IntPtr cvCreateHeader(
Size size,
int a,
int b);
我很清楚,这是不好的做法,在管理应用程序分配非托管内存,但是在这种情况下,我别无选择,因为DLL是第三方。
有一个释放内存的等价函数,我知道分配数组的大小是多少。
- 如何固定返回的指针,使GC不移动它(不会不安全)? '固定'不会这样做,因为这个指针在整个班级中被广泛使用?
- 这个p/Invoke有更好的方法吗?
为什么非托管指针会移动(低位更改地址)?我认为你的理解是错误的。只有在非托管代码中使用托管对象时才需要修复。 – leppie
GC在优化(碎片整理)操作中移动托管对象(指针)。 – Gilad
那么你没有使用托管指针。 – leppie