這樣做的最佳方法是什麼....?關於是否使用本地C++ DLL的建議:PINVOKE&Marshaling?
我有一些本地C++代碼,使用大量的Win32調用與字節緩衝區(使用HeapAlloc分配)。我想擴展代碼並創建一個C#GUI ...並且稍後可能會使用基本的Win32 GUI(用於沒有.NET和有限的MFC支持的地方)。 (A)我可以在C#中重新編寫代碼並使用多個PINVOKE ....但即使在單獨的類中使用PINVOKES,代碼也會與所有編組看起來混亂。我也在重寫很多代碼。 (B)我可以創建一個本地C++ DLL並使用PINVOKE來封送原生數據結構。我假設我可以使用C#在一個項目中包含本地C++ DLL/LIB? (C)創建混合模式DLL(Native C++類和託管ref類)。我假設這將使在C#中使用託管的ref類更容易......但是這種情況?託管類將處理所有編組嗎?我可以在沒有.Net的平臺上使用這種混合模式DLL(即仍然訪問本地C++非託管組件)還是僅限於.Net only平臺。
有一件事讓我困擾這些選項中的每一個都是編組。創建一個託管數據結構(數組,字符串等)並將其傳遞給本機C++類還是相反?
關於什麼會被認爲是最佳實踐的任何想法......?
更新: 我知道我可以重新編寫原生C++代碼,但它意味着複製代碼並阻止我輕鬆地重新使用任何代碼更新與任何Win32應用程序。最讓我感興趣的是整理託管和非託管世界之間各種數據的最佳方式。對我而言,混合模式DLL看起來是最靈活的選擇,但我想對潛在的缺陷有不同的看法。