2015-07-11 47 views
1

我有我想從C#調用兩個函數共享類似的特徵:如何從C.dll在C#馬歇爾字節*

BOOL Read (BYTE Len, BYTE* DataBuf) 
BOOL Write (BYTE Len, BYTE* DataBuf) 

從文件:傳輸的數據

的DATABUF目的地

我應該在C#調用中使用什麼?

  • 的byte []
  • myByteArr [0]
  • 的P/Invoke助理建議System.IntPtr

不必的考驗硬件,但我試圖得到儘可能當我們有時,很多電話都是正確的。

謝謝。

回答

2

對於讀取功能使用:

[Out] byte[] buffer 

對於寫功能使用:

[In] byte[] buffer 

[In]是默認的,可以省略,但明確表示並不傷害。因此

的職能將是:

[DllImport(filename, CallingConvention = CallingConvention.Cdecl)] 
static extern bool Read(byte len, [Out] byte[] buffer); 

[DllImport(filename, CallingConvention = CallingConvention.Cdecl)] 
static extern bool Write(byte len, [In] byte[] buffer); 

很顯然,你需要將它傳遞給非託管函數之前,數組分配。

因爲byte是blittable,編組人員作爲一個優化,釘住數組並傳遞固定對象的地址。這意味着不執行復制並且參數傳遞是有效的。

+0

我一直在使用 – user1957413