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

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

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

有帮助吗?

解决方案

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

http://blogs.msdn.com/ jmstall /存档/ 2007/01/06 /类型安全-GetProcAddress.aspx

其他提示

您可以通过P / Invoking到LoadLibrary和GetProcAddress,然后使用 Marshal.GetDelegateForFunctionPointer

有关详细信息,请参阅本文

另见这篇来自Jonathan Swift的博客文章动态地从.net中调用一个非托管的dll

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top