从.NET动态P / Invoke非托管代码的最佳方法是什么?
例如,我有许多非托管DLL,它们之间有共同的C风格导出。我想获取DLL的路径,然后根据导出的名称P / Invoke一个函数。直到运行时我才知道DLL名称。
基本上,.NET的LoadLibrary
和GetProcAddress
相当于什么? (我现有的代码使用这些函数来完成相同的目标,完全在非托管代码中。)
答案 0 :(得分:5)
本文介绍了GetProcAddress的类型安全托管包装,它可以帮助您解决问题。
http://blogs.msdn.com/jmstall/archive/2007/01/06/Typesafe-GetProcAddress.aspx
答案 1 :(得分:3)
您可以通过P / Invoking到LoadLibrary和GetProcAddress,然后使用Marshal.GetDelegateForFunctionPointer来完成此操作。
有关详细信息,请参阅this article。
答案 2 :(得分:2)
另见Jonathan Swift的this博客文章动态调用.net中的非托管dll
答案 3 :(得分:0)
您可以选择创建一个本机函数,该函数负责将相应的DLL和函数加载到内存中,然后根据您的路径将该函数返回到托管代码。这样您就可以自然地使用GetProcAddress技巧并返回功能点。然后你可以PInvoke进入这个函数并返回一个Delegate,然后它将调用到正确的DLL中。