モジュールに次の宣言があります。
Private Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As String, ByVal mode As String) As Long
関数内の次のコード行は、「ファイルが見つかりません: ZLIB.DLL」エラーで失敗します。
lGZFileHandle = gzopen(sPath, "rb")
ZLIB を登録する必要がないことは承知しています。私の質問は、コードが機能するために ZLIB.DLL をどこに置く必要があるかということです。また、このコードが別のマシンで動作していることも知っています。現在、アプリケーションexeと同じフォルダーにZLIB.DLLがあります。
アップデート
私の安堵のために、コードはコンパイル時に機能します。ただし、IDE での実行中は機能しません (別のマシンでは機能します)。アプリケーション フォルダにまだ ZLIB.DLL があります。これは、DLL をロードするためにアプリケーション パスをチェックする必要があることを意味します。
これを回避するために、私は試しました:
Private Declare Function SetDllDirectory Lib "Kernel32" Alias "SetDllDirectoryA" (ByVal path As String) As Long
そして、関数で:
SetDllDirectory App.path
これで DLL をロードできるように見えますが、代わりに「DLL 呼び出し規約が正しくありません」というエラーが表示されます。プロットが厚くなります。
解決した
答えはここにあるようです: http://www.zlib.net/DLL_FAQ.txt。それは私が推測するRTFMの場合です。そのため、奇妙なことに、IDE 内ではSTD_CALL
規約が有効ですが、一度コンパイルすると C スタイルの呼び出し規約で十分です。IDE の別のマシンで動作する理由はまだ説明されていません。うーん。
私を正しい方向に向けてくれてありがとう。