2016-09-29 63 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

因为我已经把你的问题作为重复来解决,所以我不认为它是无用的。 –

相关问题