2016-09-29 60 views
0

我希望這是一個簡單的問題,但我一直無法在我的搜索中找到解決方案。我有一個C#應用程序需要加載來自多個DLL的數據。每個DLL保證具有相同的函數foo()。但我希望這些DLL在運行時即插即用。我通常處理的DLL(在那裏我知道名字)的方法是使用:在編譯時未知名稱時,在C#中導入非託管DLL

[DllImport("my_dll.dll", CallingConvention = CallingConvention.Cdecl)] 
public static extern int foo(); 

如何做到這一點有一個動態的字符串的文件名稱,而不是(例如,「my_dll_3934.dll」)?此外,可能有超過1個必須加載的匹配相同簽名的dll(例如,「my_dll_3934.dll」和「my_dll_3935.dll」)。

將使用的DLL將由我生成,但我希望最終用戶只需刪除該DLL即可,因爲無需更新應用程序即可更新/新增dll。我會做適當的錯誤檢查和異常處理。

預先感謝您。

+2

看看這個問題和答案...我認爲那個有11票將滿足您的要求:) http://stackoverflow.com/questions/8836093/how-can-i-specify-a-dllimport -path-at-runtime – Hackerman

+1

我沒有立即提供代碼示例,因此我會將它作爲註釋而不是解決方案進行發佈,但我認爲您需要探索LoadLibrary(),然後使用GetProcAddress()來完成這在你描述的動態場景中。您可以將一個字符串傳遞給LoadLibrary,獲取該模塊的句柄,然後使用GetProcAddress查找該函數。 –

+0

另外不要忘記,如果這個答案可以幫助你,請將它投票! – Hackerman

回答

0

回答我的問題可以在這裏找到:

How can I specify a [DllImport] path at runtime?

由用戶冉評論

。感謝Hackerman指引我找到正確的解決方案。

+0

不要這樣做刪除您的問題或將問題標記爲指向其他問題的版主 –

+0

抱歉。不知道。我應該刪除答案嗎? – JLB

+0

因爲我已經把你的問題作爲重複來解決,所以我不認爲它是無用的。 –

相關問題