【问题标题】:dllimport failed to locate dll even though it is in the PATHdllimport 无法找到 dll,即使它位于 PATH 中
【发布时间】:2008-11-16 16:43:17
【问题描述】:

我使用 [Dllimport("DllName.dll")] 我确定我的 dll 的路径存在于进程 PATH 环境变量中,并且仍然 我得到“找不到 DllName.dll”

【问题讨论】:

  • 请检查目标平台(X86 or x64 or AnyCPU)

标签: dll path pinvoke dllimport


【解决方案1】:

“找不到 DllName.dll”也可能意味着 DllImport 没有找到 DllName.dll 依赖项之一。

获取 Dependecy Walker 以检查您缺少哪个依赖项。

【讨论】:

    【解决方案2】:

    我建议您使用 FileMon (sysinternals.com) 来检查您对库位置的假设是否正确。

    【讨论】:

      【解决方案3】:

      DllImport 在加载 DLL 时不参考 PATH 环境变量。我相当肯定 DllImport 在按名称引用 DLL 时遵循在本机程序中加载本机 DLL 的标准规则。这是一篇详细介绍这些规则的文章

      http://msdn.microsoft.com/en-us/library/ms682586.aspx

      我发现加载 DLL 的最简单方法就是将它放在与我正在执行的程序相同的位置。

      【讨论】:

      • 也许我想念你的答案,但听起来不对。我创建了一个简单的 asp.net Web 应用程序,它使用 DllImport 属性从自定义 c++ dll 调用一个简单的导出函数。在不更新路径环境变量的情况下,我得到“无法加载 DLL”异常。但是,当路径环境变量更新为包含 dll 的路径时,我可以很好地调用外部函数。
      • 我在这里遇到了同样的问题。如果我使用 DllImport("sample.dll"),它将无法工作。但是,如果我尝试 DllImport("C:\\Somelocation\\sample.dll"),它会起作用。
      【解决方案4】:

      我在 C# 应用程序中使用 const string lcms2Path = "C:\\lcms2.dll"; 的时间最长。但最终将 DLL 移至 BIN 文件夹,这完美运行 [DllImport("lcms2.dll")]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 2012-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        相关资源
        最近更新 更多