我正在尝试使用需要 int** 作为方法参数之一的第三方 DLL。它将参数描述为指向内存分配的指针的地址。
抱歉造成任何混淆。我认为该参数是双向的。 DLL 用于与 FPGA 板通信,方法是在主机 PC 和 PCI 板之间设置 DMA 传输。
最佳答案
使用引用 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;
}
关于c# - DLLImport Int** - 如果可以的话如何做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/209258/