修复了带有锯齿状数组的语句

2023-12-05

我有锯齿状数组,需要将其传递给外部方法。

[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 元素变得无效。

将锯齿状数组作为单维指针数组传递给本机方法的最佳方法是什么?

Update:

下面是 NativeMethod 的 C++ 代码:

NativeClass::NativeMethod(const int* array)

您的问题在于您需要修复数组,因为这是您正在使用的数组。您可以固定该数组,以便 GC 不会收集它:

 GCHandle h = GCHandle.Alloc(array, GCHandleType.Pinned);

UPDATE

正如您所正确指出的那样,数组内的每个数组也需要固定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修复了带有锯齿状数组的语句 的相关文章

随机推荐