我需要将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;
}
答案 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。