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 への絶対パスを設定しようとしましたが、役に立ちません。
どうすれば機能しますか?