簡體   English   中英

使用C#在運行時確定的C ++ DLL

[英]Using C++ DLLs determined during runtime in C#

我目前正在從事C#項目,對C#的經驗為零。

我們有一組用C ++編寫的DLL,它們具有相同的類和相同的功能,但是它們的工作方式不同。 舉例來說,假設我們的程序轉換了BMP文件。 我們有用於將BMP轉換為JPG,將BMP轉換為PNG等的DLL。

用C#編寫的程序應該以某種方式包裝這些DLL,但不能以靜態方式包裝。 我們希望能夠在運行時更改正在使用的DLL,並在需要時(也在運行時)添加新的DLL。 像插件一樣,如果可以的話。

您對實施此方法有何建議?

如果您不知道所有DLL都提前了,則可能需要調用Win32函數“ LoadLibrary”,“ GetProcAddress”和“ FreeLibrary”。 據我所知,C#沒有辦法自動執行某種動態PInvoke。 有關更多信息,請參見此博客文章

另外,您可以使用PInvoke為每個DLL創建一個C#包裝器,然后使用托管委托來調用函數。 然后,通過更改委托,您可以在運行時調用其他函數(可能在其他DLL中)。 這取決於您在編譯時要使用的DLL的完整列表。 但是,它比第一種方法更健壯。 讓運行時為您處理所有封送處理也要容易上千倍。 有關更多信息,請參見此MSDN文章

如果它們已經在C ++中,我將選擇用C ++編寫托管程序集。
演練可能是一個起點。 特別是C ++的人不需要學習C#。
P / Invoke稍慢一些,但更深的問題是版本管理,因為P / Invoke將導致運行時異常,並且在發生更改時不會編譯錯誤。

您可以使用Microsoft提供的externDLLImport類的工具,有關更多詳細信息,請單擊此處此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM