c# - 需要使用 DllImport 导入的非托管 dll 版本

标签 c# dllimport

我正在开发一个将非托管 dll 导入 C# 的应用程序。它有一个包装类来加载方法,以便可以调用它。这些方法在 dll 的程序中运行良好。我想添加保存正在使用的 dll 版本。我发现我需要使用 FileVersionInfo.GetVersionInfo("my.dll") 感谢 C# getting version of unmanaged dll 。然而,当运行这个函数时,它会异常说找不到“my.dll”。该 dll 位于 c: 根目录下的文件夹中。该文件夹位于 PATH 中并根据 http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx#search_order_for_desktop_applications它应该找到它。

既然知道 my.dll 文件已加载并正在工作,为什么我不能在同一个包装类中调用 GetVersionInfo() 并找到 my.dll 以便获取同一文件的版本号?感谢您的帮助,我已经找了几天了。

最佳答案

它需要完整路径,它不会搜索DLL。这样做风险太大,Windows 的 DLL 搜索规则非常复杂并且需要配置。如果您需要在调用任何函数之前执行此操作,那么最好的方法是调用 SearchPath()。如果将第一个参数设置为 null,则它使用与 LoadLibrary 相同的算法。

如果您需要在 pinvoking 函数之后执行此操作,那么最好的方法是使用加载的 DLL。迭代 Process.GetCurrentProcess().Modules 以检索 ProcessModule.FileName。

关于c# - 需要使用 DllImport 导入的非托管 dll 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089236/

相关文章:

c# - 使用导体和事件聚合器的分层导航

c# - TeamCity 已经为

c# - 从非托管代码传递指针

c++ - ESP 的值未在函数调用错误中正确保存

c# 在不使用 using{} 的情况下写入文件

c# - OWIN 干扰 log4net

c# - 使用Jquery无法获得正确的输出

.net - 从 CentOS 中单声道下运行的 .NET 应用程序调用 native linux 库时,IL 代码无效

c# - PInvoke一个结构指针来获取数据

c# - C# 中 WORD 的等价物是什么?