2014-04-04 132 views
0

我需要將c#中的數字數組發送到.dll,並用++編寫它們並將它們返回以供顯示。將int數組從C++ .dll返回到c#

目前我發送的數據,但我似乎無法讓他們回到正確的格式。該程序崩潰或返回隨機的東西。

這是definiton:

[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

如果你正在排序數組,爲什麼你需要返回指針?數組已排序,不是嗎? – PaulMcKenzie

+0

嗯,我把一個指針,因爲我不能找到另一種方式返回數組。我知道它的用途,但我知道的最好。我不能把int []放在函數中,或者我可以嗎? – Shawn

+1

我在說的是你不需要返回任何東西。你正在採集數據,你正在對它進行排序。在返回時,您傳入的相同數組應該已排序數據。如果不是,那麼你需要發佈這個sort()函數。另外,我強烈建議你給DLL函數數組中的元素數量。 sort()函數沒有辦法真正知道它排序的元素數量。 – PaulMcKenzie

回答

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是正確的。

+0

謝謝。你爲我節省了很多工作。 – Shawn