我继承了一些需要与之交互的代码。具体来说,有一个我想从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/

10-11 00:31