2014-08-29 74 views
-2

我正在編寫一個小應用程序,通過API與外部設備進行通信(均爲64位)。我從指導下面的方法我想使用:C# - 來自非託管代碼的返回類型int *

int* GetRevision(void* cu_ptr, int num) 

我試圖做PinVoke模式:

[DllImport("ABCAPI.dll")] 
public static extern IntPtr GetRevision(IntPtr cu_ptr, int num); 

而且我試圖IntPtr複製到一個int數組:

var check = GetRevision(device_cu_ptr, 1); 
int[] arr = new int[10]; 
Marshal.Copy(check, arr, 0, arr.Length); 

有沒有更好的方法將c#中的INT*轉換爲Int[]?或者我的代碼中可能存在錯誤?

+3

您的最後一句暗示了這個代碼不起作用的事實。如果是這樣,你能解釋爲什麼它不是? – CodeCaster 2014-08-29 10:11:36

+0

可能重複[在C#中的指針,以使int數組?](http://stackoverflow.com/questions/2546706/pointers-in-c-sharp-to-make-int-array) – 2014-08-29 10:13:45

+0

@PaulZahra:發現一個但是,不,不是一個騙局。這主要是關於誤解,而不是如何解決。 – 2014-08-29 10:14:28

回答

0

好的,看起來像Marshal.Copy是正確的方式來轉換這些數據類型。

var check = GetRevision(device_cu_ptr, 1); 
int[] arr = new int[10]; 
Marshal.Copy(check, arr, 0, arr.Length);