2014-04-04 3 views
0

으로 반환합니다. C#에서 .dll로 작성된 숫자 배열을 ++로 정렬하여 표시하고 다시 표시해야합니다.int 배열을 C++ .dll에서 C#

현재 데이터를 보내고 있지만 올바른 형식으로 다시 가져올 수 없습니다. 프로그램이 충돌하거나 임의의 무언가를 반환합니다.

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

이 내가 그것을 호출하는 방법입니다

은 definiton입니다. 당신은이에 DLL 함수의 프로토 타입을 변경할 수 있습니다

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

배열을 정렬하는 경우 왜 포인터를 반환해야합니까? 배열이 제자리에 정렬되어 있지 않습니까? – PaulMcKenzie

+0

배열을 반환하는 다른 방법을 찾을 수 없기 때문에 나는 거기에 포인터를 넣었습니다. 그리고 나는 그 uselles를 알고있다. 그러나 나는 최고를 얻었다. 함수에 int []를 넣을 수 없습니까? – Shawn

+1

내가 말하는 것은 당신이 아무것도 반환 할 필요가 없다는 것입니다. 당신은 데이터를 가져 가고 그것을 제 위치에서 정렬하고 있습니다. 돌아 왔을 때, 전달한 동일한 배열에 데이터 정렬이 있어야합니다. 그렇지 않으면이 sort() 함수를 게시해야합니다. 또한 DLL 함수에 배열의 요소 수를 제공하는 것이 좋습니다. sort() 함수가 정렬하는 요소의 수를 실제로 알 수있는 방법은 없습니다. – PaulMcKenzie

답변

0

sorted = sort(numbers); 

는 C++ 기능 : 배열이 자리에 정렬됩니다

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에 적합하면 좋겠다.

+0

감사합니다. U는 나에게 많은 일을 덜어 줬다. – Shawn