DLLImport Int ** – 如果可以的话,如何做到这一点

我试图使用第三方DLL,它想要一个int **作为方法的参数之一。 它将参数描述为指向内存分配的指针的地址。

对不起任何困惑。 我认为参数是双向的。 DLL用于与FPGA板通信,该方法是在主机PC和PCI板之间建立DMA传输。

使用by-ref System.IntPtr

  [DllImport("thirdparty.dll")] static extern long ThirdPartyFunction(ref IntPtr arg); long f(int[] array) { long retval = 0; int size = Marshal.SizeOf(typeof(int)); var ptr = IntPtr.Zero; try { ptr = Marshal.AllocHGlobal(size * array.Length); for (int i= 0; i < array.Length; ++i) { IntPtr tmpPtr = new IntPtr(ptr.ToInt64() + (i * size)); Marshal.StructureToPtr(array, tmpPtr, false); } retval = ThirdPartyFunction(ref ptr); } finally { if (ptr != IntPtr.Zero) Marshal.FreeHGlobal(ptr); } return retval; } 

在这种情况下,您将不得不使用Marshal类或不安全。

它也可以只是一个指向数组的指针,因此ref int[] list可能有效。

int **将是和IntPtr的数组,从您的描述中我想您可能希望使用C ++ / CLI来帮助您进行转换,例如从非托管int **到托管数组^> ^