我們正在構建一個針對x32的Win7 x64上的c#,.net 4.0應用程序。PInvoke,指針和陣列副本
我們在我們的應用程序中使用第三方庫。我們知道這個庫是用C++編寫的。但是,爲了讓c#開發人員使用這個庫,他們使用P/Invoke來封裝它,所以我們稱之爲API函數。
一個API調用的如下:
ReadFromDevice(int deviceAddress, int numBytes, Byte[] data);
該功能從外部裝置讀出的數據的的numBytes,並將其放置在數據[]。正如你所看到的,它期望看到一個C#Byte數組作爲第三個參數。現在,我們的問題是,我們想要將數據讀取到預先聲明的數組中的任意位置。例如:
Byte[] myData = new Byte[1024*1024*16];
ReadFromDevice(0x100, 20000, &myData[350]) // Obviously not possible in C#
如果我們使用C/C++,這將是微不足道的。考慮到底層API是用C++編寫的,我覺得我們應該可以在C#中完成這個工作,但是,我無法弄清楚如何在C#中執行此操作。也許我們可以不通過提供的P/Invoke接口調用底層庫並編寫自定義接口?
任何想法,將不勝感激。
Regards,
稱之爲有沒有從'字節*`轉換爲`的byte []`,這段代碼甚至不會編譯。如果他控制了C#源代碼,那將是一回事,但這聽起來不像他原來的問題。 – 2011-02-04 08:54:59
這就是說,在再次閱讀問題時,它聽起來像OP也可以訪問C++庫,因此您應該簡單地建議他添加自己的DllImport並將簽名更改爲接受「byte *」而不是`byte []`,那麼這將工作。刪除downvote。 – 2011-02-04 09:03:03
「 我們正在構建一個應用程序在c#,.net 4.0,在Win7 x64上,目標是x32 我們在我們的應用程序中使用第三方庫我們知道這個庫是用C++編寫的,但是爲了讓c#開發人員使用這個庫,他們使用P/Invoke來封裝它,所以我們稱之爲API函數。「 所以他們控制了C#併爲C++庫編寫了一個包裝器! – N4rk0 2011-02-06 22:35:15