0

C DLL に次の構造体があります。

struct foo
{
      double *x;
      short  *y;
}

DLL を呼び出す C# アプリ:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class foo
{
        public ? x;
        public ? y;
}

int* がある場合は IntPtr を使用する必要があることは理解していますが、short* と double * に相当するものが見つかりません。

C 側では、short * を使用して short の配列を割り当て、double * を double の配列に割り当てています。

4

1 に答える 1

1

実際、C# のすべてのアンマネージ ポインターは、 を使用して表されIntPtrます。IntPtrに類似しているint *ためではなく、「ポインタ」サイズの整数であるために呼び出されます (それぞれ 32 ビットおよび 64 ビットの整数である および とは対照的です) Int32Int64そのサイズはプラットフォームに依存します。

たとえば、の値を取得するにはx[0]、次のようにします。

double[] arr = new double[1];
Marshal.Copy(f.x, arr, 0, 1);

を読む*yには、あなたはそうするでしょう

short val = Marshal.ReadInt16(f.y);
于 2012-09-18T01:36:05.590 に答える