我有一個在C#
中編寫的應用程序,它使用編寫在C
中的DLL。 通過一些委託(函數指針),我設法調用了一個C
函數。預計此功能會對某些數據執行大量處理,然後將處理後的二進制數據連同數據大小一起返回到C#
代碼。將數據從非託管代碼(C)傳遞到託管代碼(C#)
原型爲管理c#
功能是:
private unsafe delegate void MyCallback (IntPtr cs_buf, Int32 cs_size);
而且我從我C code
因調用該:
void* c_buf = NULL;
int c_size = 0;
.... some processing here to fill buf and size......
MyCallback (c_buf, c_size);
在管理C#
代碼,我需要調用一個函數來自MyCallback
的原型:
void foo (byte[] cs_buf, int cs_size)
現在有與cs_size
值沒有問題,但什麼是使用/從C代碼的二進制緩衝區傳遞到C#代碼,以便它可以被用作C#代碼byte[]
的正確方法。
如果我正在做的是正確的方法,應該將接收的IntPtr cs_buf
轉換爲byte[]
的推薦方式是什麼?
謝謝, 維克拉姆
如果您的項目中沒有託管的C++代碼,並且只是這一個調用,那麼這是最佳解決方案。 –
+1。這工作。謝謝 :)。但是,我只是在想,這不會引入額外的複製開銷嗎? –
它的確如此,但它仍然是最好的解決方案,如果您沒有任何託管C++並且您沒有太多這樣的調用,並且性能不是很重要。我的答案可以用來避免額外的副本,但是你必須創建一個C++項目(可以編譯成一個點網絡程序集)。 –