我继承了一些需要与之交互的代码。具体来说,有一个我想从C#调用的封送处理命令。代码调用看起来像这样;
[DllImport(DLL_PATH, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern void readTable([MarshalAs(UnmanagedType.LPArray)] ushort[,] buffer);
因此,“ readTable”命令将填充多维数组“ buffer”。
我不能很好地做到这一点,但是这是我的(非编译)尝试。
ushort[,] myTable = new ushort[5,100]; // multidimensional array
unsafe
{
fixed (ushort* inputPtr = &myTable[0, 0])
{
readTable(inputPtr);
}
}
显然不能编译,但是我是一个新手,无法修复该错误。
我真的很想宣布;
fixed(ushort[,]* inputPtr = &myTable)
但这只是胡说。
有人了解我的困境吗?谢谢堆!
最佳答案
尝试这个:
ushort[,] myTable = new ushort[5,100];
readTable(myTable);
除非
readTable
在返回后保留指针,否则封送拆收器固定和取消固定数组对您来说将正常工作。关于c# - 在C#中编码(marshal)ushort [,]多维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18607637/