将int数组从c ++ .dll返回到c#

时间:2014-04-04 15:38:58

标签: c# c++ arrays dll

我需要将c#中的数字数组发送到用++编写的.dll中对它们进行排序并将它们取回进行显示。

目前我正在发送数据,但我似乎无法以正确的格式恢复数据。程序崩溃或随机返回一些东西。

这是定义:

[DllImport("kmp.dll",CallingConvention=CallingConvention.Cdecl)]
public static extern IntPtr sort([MarshalAs(UnmanagedType.LPArray)] int[] vhod);

这就是我所说的。

sorted = sort(numbers);

c ++函数

extern "C" _declspec(dllexport) const int* sort(const int arr[])
{
    return arr;
}

1 个答案:

答案 0 :(得分:0)

您可以将DLL函数中的原型更改为:

extern "C" _declspec(dllexport) void sort(const int arr[], int numElements);

由于数组已就地排序,因此无需返回相同的数组。此外,您需要指定arr将要寻址的元素数量。

在C#端,您需要适当地声明该功能。

[DllImport("kmp.dll",CallingConvention=CallingConvention.Cdecl)]
public static void sort([MarshalAs(UnmanagedType.LPArray)] int[] vhod, int numElements);

希望上面的内容适用于C#pinvoke。