我正在学习如何从C#代码中调用C代码。我想调用一个C函数返回一个二维数组。这个函数没有参数。下面是函数:如何从C代码返回一个2D int数组到C#?
extern "C" _declspec(dllexport) int** intMatrixReturn()
{
int** A = (int**)malloc(3 * sizeof(int *));
for(int i = 0; i < 3; i++)
{
A[i] = (int*)malloc(3 * sizeof(int));
for(int j = 0; j < 3; j++)
{
A[i][j] = i * j;
}
}
return A;
}
这是我正在试图访问数组在我的C#代码:
IntPtr ip = intArrayReturn();
int[] iarr = new int[9];
Marshal.Copy(ip, iarr, 0, 9);
foreach (var item in iarr)
{
Console.WriteLine(item);
}
这是我的控制台输出:
1
2
3
4218
86245572
86252624
0
0
0
我认为我的问题是我的C#代码。我如何读取从我的C函数返回的2D int数组?另外,垃圾收集器是否释放了包含2D数组的内存,或者我应该在C#代码中执行该操作?
我很抱歉,如果这是重复的,但我发现有关二维数组的所有问题都涉及将它们从C#发送到C,而不是其他方式。
你能告诉你你正在使用C#端的DLL导入函数吗?另外,你是否将内存设置为C端的任何内容;因为如果你不这样做,它会是随机的。 – 2013-03-08 20:14:54