【发布时间】:2012-09-24 08:34:32
【问题描述】:
我有一个在c++ Win32 DLL 中定义的结构,如下所示:
typedef struct matrix
{
double** data;
int m;
int n;
} Matrix;
还有一个功能:
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;
}
如果我在 C# 应用程序中使用 P/Invoke,如何捕获此函数的返回值
【问题讨论】:
-
这看起来更像是 C 而不是 C++。
-
我认为
double**转换为double[][]。不确定是否必须用属性装饰它才能使其正常工作。 -
@lc。您需要手动编组它
-
您声明数据为
double**,但实际上它是int**。解决这个问题,@user629926 的回答技术会让你回家。 -
你第一个 malloc 是错误的。应该是
mat.data = (int**) malloc (sizeof(int*) * mat.m),但最好是(int**) malloc(sizeof(*mat.data)*mat.m)
标签: c++ c++ interop pinvoke marshalling managed