我在模块中有以下声明:
Private Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As String, ByVal mode As String) As Long
Run Code Online (Sandbox Code Playgroud)
函数中的以下代码行失败,出现"找不到文件:ZLIB.DLL"错误:
lGZFileHandle = gzopen(sPath, "rb")
Run Code Online (Sandbox Code Playgroud)
我知道ZLIB不需要注册.我的问题是,ZLIB.DLL需要在哪里才能使我的代码工作?我也知道,这个代码是工作的另一台机器上.目前我在与应用程序exe相同的文件夹中有ZLIB.DLL.
UPDATE
令我宽慰的是,代码在编译时确实有效.但是在IDE中运行时它不起作用(它在不同的机器上运行).我仍然在应用程序文件夹中有ZLIB.DLL.这意味着必须检查应用程序路径以加载DLL.
为了解决这个问题,我尝试过:
Private Declare Function SetDllDirectory Lib "Kernel32" Alias "SetDllDirectoryA" (ByVal path As String) As Long
Run Code Online (Sandbox Code Playgroud)
然后在功能中:
SetDllDirectory App.path
Run Code Online (Sandbox Code Playgroud)
这似乎允许加载DLL,但我然后得到'错误的DLL调用约定'错误.情节变粗.
解决了
答案似乎在这里:http://www.zlib.net/DLL_FAQ.txt.我想这是RTFM的一个例子.因此,在IDE中,这个STD_CALL常规很有效,但是一旦编译完成,C样式调用约定就足够了.它仍然无法解释为什么它适用于IDE中的其他计算机.哼哼.
谢谢大家指出我正确的方向.
| 归档时间: |
|
| 查看次数: |
5367 次 |
| 最近记录: |