2

インターフェイスが必要なコードをいくつか継承しました。具体的には、C# から呼び出したい Marshaled コマンドがあります。コード呼び出しは次のようになります。

[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)

しかし、それはナンセンスです。

私の窮状を理解してくれる人はいますか?ありがとうございます!

4

2 に答える 2

2

私の見解:

多次元配列は、すべての次元のサイズの連続配列です。

あなたの場合、「C」コードはそれをushort[5 * 100].

これを機能させるには、次の手順を実行します。

ushort[,] myTable = new ushort[5, 100];   // multidimensional array

unsafe
{
  fixed (ushort* inputPtr = myTable)
  {
    readTable(inputPtr);
  }
}

残念ながら、これをテストする時間はありませんが、問題なくコンパイルできます。

于 2013-09-04T07:25:30.113 に答える