我有一個非托管的C ++ DLL,它僅導出單個類(不是COM ...這只是一個簡單的C ++類)作為其接口。我想在C#中使用此類,但被告知不能僅將其導入C#中。在我的C#應用程序中使用此類的正確方法是什么?
3 回答

開滿天機
TA貢獻1786條經驗 獲得超13個贊
假設Foo類的簡單方法:
創建一個C ++ / CLI項目,稱為FooWrapper。
使FooWrapper依賴于非托管dll(但是通常情況下)。
創建一個托管類ManagedFoo,其中包含單個Foo *類型的私有實例字段。
在ManagedFoo中提供公共包裝功能,這些功能會轉發到基礎實例字段。
可選(盡管推薦):
將參數從.net習慣用法(字符串等)轉換為C ++習慣用法(std :: string或char *)
捕獲非托管異常并拋出托管異常
然后,使您的C#代碼依賴于FooWrapper項目/ dll,并確保將非托管dll與其一起正確部署,如何完成取決于非托管dll,但通常在同一目錄中就足夠了。
如果函數不依賴于類的實例,則P / Invoke更為簡單

不負相思意
TA貢獻1777條經驗 獲得超10個贊
有時,提供自己的C接口會更容易。 SWIG設置非常簡單。我使用托管的C ++和C ++ / CLI,它們很好。最簡單的就是做一個C包裝器(并且幾乎所有其他語言都可以使用它,因為大多數語言都可以調用C函數)。
- 3 回答
- 0 關注
- 471 瀏覽
添加回答
舉報
0/150
提交
取消