动态P /调用DLL

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

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

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

本文介绍了GetProcAddress的类型安全托管包装器,它可以帮助您解决问题。

http://blogs.msdn.com/jmstall/archive/2007/01/06/Typesafe-GetProcAddress.aspx

您可以通过P / Invoking到LoadLibrary和GetProcAddress,然后使用Marshal.GetDelegateForFunctionPointer来完成此操作 。

有关详细信息,请参阅此文章 。

另请参阅Jonathan Swift的博客文章动态调用.net中的非托管dll

您可以选择创建一个本机函数,该函数负责将相应的DLL和函数加载到内存中,然后根据您的路径将该函数返回给托管代码。 这样您就可以自然地使用GetProcAddress技巧并返回function点。 然后,您可以PInvoke进入此函数并返回一个Delegate,然后将调用适当的DLL。