【问题标题】:The specified procedure could not be found. (Exception from HRESULT: 0x8007007F)找不到指定的过程。 (来自 HRESULT 的异常:0x8007007F)
【发布时间】:2016-08-23 12:05:04
【问题描述】:

我的 C++ DLL(从 C# 应用程序调用)在 Debug 版本(Debug 中的主 C# 应用程序)下工作正常,但发布版本(Release 中的主 C# 应用程序)给出 找不到指定的过程。 (来自 HRESULT 的异常:0x8007007F)] System.DllNotFoundException:无法加载 DLL 'D:\TestBluRay.dll':找不到指定的过程。 (HRESULT 异常:0x8007007F) 错误。我已经验证了所有项目设置,并且这些设置对于调试和发布似乎都是相同的。知道为什么这仅适用于发布版本吗?

【问题讨论】:

  • 您的意思是 (1) 使用调试版本的 C++ DLL 失败而使用发布版本成功,还是 (2) 使用调试版本的 C# 应用程序失败而使用发布版本成功?
  • 发行版是否有可能由于某种原因实际上看到的是旧版本的 DLL?例如,由于不小心将 DLL 文件仅复制到调试版本的文件夹中? (一个容易犯的错误......)
  • 同意以上评论。具体来说,我会检查您引用的 DLL 是否存在于 bin/debug 文件夹中,它也是 bin/release 文件夹中的那个的完全副本。最有可能的是,它不是,或者它完全丢失了。另外,请编辑您的问题并向我们显示完整的错误,如图所示。 ;)
  • 有时项目依赖项不会重建所有内容。我通常会删除强制重建的 bin 文件夹。您可以查看.exe文件的日期戳,看它是否已更新。以0x8开头的错误表示指针无效。dll需要在release和debug文件夹中。通常,当您添加引用时,编译会自动将 dll 从源位置复制到调试/发布文件夹。如果您执行重建,它会清除调试/发布中的所有文件,包括 dll。您永远不应该手动将添加文件放入 bin 文件夹中,以免它们被删除。

标签: c# c++ dll dllimport


【解决方案1】:

验证 .DLL 存在,并且在 \bin\debug(有效)和 \bin\release(失败)之间完全是最新的。

最有可能的是,.DLL 需要重新编译,或者如果它是第 3 方库,则只需复制进去。

编辑:您的错误表明该文件可能完全丢失(DllNotFoundException),或者您引用的是路径/目录,而不是完全限定的路径名​​。 “\Drivers\Blu_ray..”不是完全限定的路径名​​,其中“C:\Windows\System32\Drivers\Blu_ray..”等,是完全限定的路径名.

我的猜测是 \bin\release\ 没有 \drivers\blu_ray,而 \bin\debug\ 可能确实有 \drivers\blu_ray...

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多