【问题标题】:VB6 - runtime error 48 with C/C++ dllVB6 - 使用 C/C++ dll 的运行时错误 48
【发布时间】:2015-03-26 11:07:01
【问题描述】:

首先我想说的是,在发布此问题之前,我在这里阅读了大多数其他类似问题的问题。但我的情况略有不同。

我有一个旧的 VB6 应用程序,它使用自定义 C/C++ dll 通过 TCP 发送/读取数据。

该应用程序位于多个用户可以访问的 win2003 服务器的共享网络驱动器上。 dll 位于应用程序路径中,我使用声明来加载它。

VB6:

Public Declare Function Interface_Open Lib "Interface.dll" Alias "Open" As Integer

C/C++ dll:

_declspec(dllexport) int _stdcall Open() { }

现在来说奇怪的部分:该应用程序在 90% 的时间内都可以顺利运行。但是有些用户会随机遇到运行时错误 48“找不到 dll”,而其他用户则不会。

当我尝试调用 dll 时似乎失败了:

Interface_Open

我无法在我的 win7 64 位机器上复制错误,这让我很困惑。我还检查了共享上用户的网络权限,但他们都很好。

我认为问题不在于 C/C++ 代码,因为日志告诉我在进入 dll 之前它失败了。

我应该返回一个 long 值而不是整数吗?这可能是它无法加载 dll 的原因吗?

【问题讨论】:

  • 你试过this guy's answer吗?
  • 标准问题是它没有说明找不到什么 DLL。这往往不是是您使用的 DLL,您会知道要查找名为 Interface.dll 的文件。它是这个 DLL 使用的一个。就像 C 运行时库一样。往往会意外工作,该 DLL 通常是由其他人安装在机器上的。如果这没有帮助,请让用户运行 SysInternals 的进程监视器。它显示程序正在搜索 DLL 而没有找到它。

标签: c dll vb6 runtime-error


【解决方案1】:

整数在 VB 中是 16 位的,以便与 16 位 VB 兼容。因此,任何其他语言中的整数在 VB 中都称为 long。

【讨论】:

  • 干这个的白痴,VB6需要Win32的longs。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多