动态P /调用DLL

时间:2009-07-29 20:11:40

标签: c# dynamic pinvoke

从.NET动态P / Invoke非托管代码的最佳方法是什么?

例如,我有许多非托管DLL,它们之间有共同的C风格导出。我想获取DLL的路径,然后根据导出的名称P / Invoke一个函数。直到运行时我才知道DLL名称。

基本上,.NET的LoadLibraryGetProcAddress相当于什么? (我现有的代码使用这些函数来完成相同的目标,完全在非托管代码中。)

4 个答案:

答案 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中。