我有一个不规则数组,需要传递给外部方法。
[DllImport(...)]
private static extern int NativeMethod(IntPtr[] ptrArray);
...
fixed (ulong* ptr = array[0])
{
for (int i = 0; i < array.Length; i++)
{
fixed (ulong* p = &array[i][0])
{
ptrArray[i] = new IntPtr(p);
}
}
NativeMethod(ptrArray);
}
问题在于ptr没有被使用,被编译器移除了。根据它修复的语句也被移除了。因此,数组会被GC移动,导致ptrArray元素无效。
将锯齿数组作为指针的单维数组传递给本地方法的最佳方法是什么?
更新:
这是NativeMethod的C++代码:
NativeClass::NativeMethod(const int* array)