gpt4 book ai didi

api - VB6 API 声明路径

转载 作者:行者123 更新时间:2023-12-04 16:08:13 25 4
gpt4 key购买 nike

我在模块中有以下声明:

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 中的不同机器上工作。哼哼。

感谢大家为我指明正确的方向。

最佳答案

VB6 偏离了 Ken 建议的搜索协议(protocol)(此 link 是快速引用)。

通常的问题是 .exe 路径(列表中的搜索位置 #1)不是 VB 程序的路径,而是 VB6 IDE。所以把DLL放在你的VB程序的位置是不好的——除非你改变VB6快捷方式的“开始”位置指向那个位置。

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

关于api - VB6 API 声明路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1473598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com