加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB6 API声明路径

发布时间:2020-12-17 07:23:27 所属栏目:百科 来源:网络整理
导读:我在模块中有以下声明: Private Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As String,ByVal mode As String) As Long 函数中的以下代码行失败,出现“找不到文件:ZLIB.DLL”错误: lGZFileHandle = gzopen(sPath,"rb") 我知道ZLIB不需要注册
我在模块中有以下声明:

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.

UPDATE

令我宽慰的是,代码在编译时确实有效.但是在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中的其他计算机.哼哼.

谢谢大家指出我正确的方向.

解决方法

VB6偏离了Ken建议的搜索协议(这个 link是快速参考).

通常的问题是.exe路径(列表中的搜索位置#1)不是VB程序的路径,而是VB6 IDE.因此,将DLL放在VB程序的位置并不好 – 除非您将VB6快捷方式的“Start In”位置更改为指向该位置.

或者,您可以将DLL放在我的链接中指定的其他位置之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读