я скачал zlibи скомпилировал библиотеку как dll для 32-битной и 64-битной Windows. Теперь у меня есть 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)
Я нашел много подобных вопросов в Интернете, и предполагаемая причина заключалась в том, что библиотека зависит от некоторых других библиотек, и это те библиотеки, которые могут не быть найдены.
Похоже, это не так:
Я пытался установить абсолютный путь к 64-битной dll, это не помогает.
Как заставить это работать?