我下载了zlib并将库编译为 Windows 32 位和 Windows 64 位 dll。我现在有zlibwapi.dll
和zlibwapi64.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 位版本提供
无法加载 DLL“zlibwapi64.dll”:找不到模块。(HRESULT 异常:0x8007007E)
我在网上找到了很多类似的问题,建议的原因是该库依赖于其他一些库,并且可能找不到那些库。
情况似乎并非如此:
- zlibwapi64.dll 仅依赖于 Kernel32.dll 和 MSVCR90.dll。我确实安装了 32 位和 64 位的 VS2008 C++ 运行时。
- 当我尝试从非托管 C++ 应用程序加载 zlibwapi64.dll 时,它加载没有问题。是 C# 无法加载它。
我尝试设置 64 位 dll 的绝对路径,但没有帮助。
我如何使它工作?