2010-08-06 24 views
2

我有一個非託管(C/C++)DLL,我需要從C#應用程序調用。如何從C#訪問非託管數據

DLL調用需要將數據(從DLL創建的C++類)返回給C#應用程序。

我可以控制DLL的導出函數,所以我可以根據需要在C++類中創建一個包裝器。我知道如何用p/Invoke來訪問DLL,所以我只是在尋找一些關於如何返回數據的指導。

從DLL接收的數據是一系列鍵值對,所以我在考慮返回一個JSON字符串並使用Json.NET將其反序列化爲一個對象。

訪問來自C#/。NET應用程序的非託管源的此類數據的首選方式是什麼?

+0

如果您包含從C++導出的方法簽名,我相信有人會幫助您編寫所需的PInvoke。 – 2010-08-06 16:55:20

+1

不知道你打算複製什麼樣的數據,JSON看起來像這樣的矯枉過正。爲什麼不只是null/tab/colon/whatever-delimit字符串? 更好的是,爲什麼不添加一個C++/CLI模塊並直接轉換所有內容而不是通過P/Invoke? – ChrisV 2010-08-06 17:02:53

回答

2

如果你能修改C++ DLL然後C++/CLI可能是最乾淨的。您將能夠直接在C++中編寫一組.NET包裝類,避免編寫單獨的P/Invoke聲明。

0

沒有真正的理由添加額外的序列化層只是爲了在託管和非託管應用程序之間傳輸代碼。但是,如果你的代碼更簡單,並且你不擔心性能,那麼你可以將數據從一層移動到另一層是完全沒問題的。

如果你想在這裏試試PInvoke的方式有一些資源從MSDN ...

相關問題