gpt4 book ai didi

c# - 加载 64 位 dll 时出现 HRESULT 0x8007007E 的 DllNotFoundException

转载 作者:太空狗 更新时间:2023-10-29 20:01:38 25 4
gpt4 key购买 nike

我下载了zlib并将库编译为 Windows 32 位和 Windows 64 位 dll。我现在有 zlibwapi.dllzlibwapi64.dll

dll复制到我的应用文件夹中,引用如下:

[DllImport(@"zlibwapi.dll",   EntryPoint = "uncompress", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = false)]
private static extern int uncompress32(
IntPtr dest,
ref uint destLen,
[In(), MarshalAs(UnmanagedType.LPArray)] byte[] source,
uint sourceLen
);

[DllImport(@"zlibwapi64.dll", EntryPoint = "uncompress", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = false)]
private static extern int uncompress64(
IntPtr dest,
ref uint destLen,
[In(), MarshalAs(UnmanagedType.LPArray)] byte[] source,
uint sourceLen
);

在运行时我会检查我是 32 位还是 64 位,然后调用适当的版本。

如果我是 32 位的,这可以正常工作,但 64 位的版本可以

Cannot load DLL "zlibwapi64.dll": Module not found. (HRESULT exception: 0x8007007E)

网上找了很多类似的问题,建议的原因是这个库依赖了一些其他的库,可能是那些库找不到。
这似乎不是这样的:

  • zlibwapi64.dll 只依赖于 Kernel32.dll 和 MSVCR90.dll。我确实安装了 VS2008 C++ 运行时,32 位和 64 位。
  • 当我尝试从非托管 C++ 应用程序加载 zlibwapi64.dll 时,它加载没有问题。是 C# 加载失败。

我已经尝试设置 64 位 dll 的绝对路径,但没有帮助。

如何让它发挥作用?

最佳答案

这是一种相当基本的“找不到文件”错误,遗憾的是它没有明确告诉您它找不到什么 DLL。您已经了解依赖 DLL 的问题。请注意,您可以通过使用/MT 编译代码来避免对 msvcr90.dll 的令人厌烦的依赖

您需要调试问题,这需要深入了解它在何处寻找 DLL。一个好的工具是 SysInternals' ProcMon utility ,它会准确显示您的程序正在寻找文件的位置。您应该看到它正在探测 DLL,搜索 PATH 的目录但找不到文件。

不幸的是,ProcMon 有点健谈,而且习惯于让您淹没在数据中。一个更专用的工具是 GFlags.exe,该工具可从 Windows 调试工具包中获得。这些天包含在 Windows SDK 中。安装后存放在c:\program files (x86)\debugging tools for windows\gflags.exe。您可以打开“显示加载程序快照”选项。在更高版本的 Windows 上,这会告诉 Windows 加载程序在搜索 DLL 时生成调试消息。当您启用非托管调试时,它们将出现在“输出”窗口中。

首先尝试 ProcMon,上手容易得多。

当然要考虑纯托管解决方案,这样您就不会遇到这些安装问题。好的是 DotNetZip 和 SharpZipLib,这是他们的第一个谷歌热门。

关于c# - 加载 64 位 dll 时出现 HRESULT 0x8007007E 的 DllNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com