具有二维数组的 PInvoke 返回结构

Sam*_*mal 3 c++ pinvoke interop managed marshalling

我有一个在 Win32 DLL 中定义的结构,如下所示:

typedef struct matrix
{
  double** data;
  int m;
  int n;
} Matrix;
Run Code Online (Sandbox Code Playgroud)

还有一个功能:

Matrix getMatrix(void);

Matrix getMatrix()
{
    Matrix mat;

    mat.m = 2;
    mat.n = 2;

    mat.data    = (double**)  malloc (sizeof(double*) * 4);

    mat.data[0] = (double* )  malloc (sizeof(double) * 2);
    mat.data[1] = (double* )  malloc (sizeof(double) * 2);

    mat.data [0][0]=1;
    mat.data [0][1]=2;
    mat.data [1][0]=3;
    mat.data [1][1]=4;

    return mat;
}
Run Code Online (Sandbox Code Playgroud)

如果我P/Invoke从 C# 应用程序使用,如何捕获此函数的返回值

use*_*926 5

我不确定它是否有效,但从内存中:将数据声明为 IntPtr 并使用它:

static double[][] FromNative (IntPtr data, int m,int n)
{
   var matrix=new double[m][];

   for(int i=0;i<m;i++)
   {
       matrix[i]=new double[n];
       Marshal.Copy(Marshal.ReadIntPtr(data),matrix[i],0,n);
       data =(IntPtr)(data.ToInt64()+IntPtr.Size);
   }

   return matrix;
}
Run Code Online (Sandbox Code Playgroud)