我想使用第三方DLL,想要一个int **作为方法的参数之一。它将该参数描述为指向内存分配的指针地址。DLLImport Int ** - 如何做到这一点,如果它可以完成
对不起,有任何混淆。我认为这个参数是双向的。该DLL用于与FPGA板交谈,并且该方法正在设置主机PC和PCI板之间的DMA传输。
我想使用第三方DLL,想要一个int **作为方法的参数之一。它将该参数描述为指向内存分配的指针地址。DLLImport 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;
}
在这种情况下,您将不得不利用统帅类或不安全。
它也可能只是一个指向数组的指针,所以ref int[] list
可能工作。
一个int **会和IntPtr的数组,从你的描述我想你可能要考虑使用C++/CLI,以帮助您,例如从非托管INT **到托管数组转换^>^
由于它将信息传递出来,所以优先考虑参考 – JaredPar 2008-10-16 16:48:12
如何将int []转换为IntPtr? – 2008-10-16 16:48:31