【问题标题】:Debugging VB6 dll from VB6 exe从 VB6 exe 调试 VB6 dll
【发布时间】:2011-12-19 20:18:42
【问题描述】:

我有一个调用 VB6 DLL 的 VB6 程序,而后者又调用另一个 VB6 DLL。当我执行调用程序时,出现了一个我无法查明的应用程序错误,因此我研究了如何在 dll 中“看到”错误。

我阅读了 Stackoverflow 条目question about debugging VB6 dll

并按照 Booji Boy 的指示创建了一个 vbg。我还按照他的指示从他的参考列表中删除了两个 DLL。调用程序将 .txt 文件作为输入。当我执行 exe 时,我收到了这个错误:

错误号:13描述:类型不匹配

该错误不是由应用程序生成的。

这是什么意思?如何调试此问题?

【问题讨论】:

  • 该错误是运行时错误,是由应用程序生成的,但来自 VB 运行时内部。您的代码中的某些内容或您正在调用的 Dll 导致类型不匹配,VB 运行时以“友好”的方式捕获。至于怎么调试,不看代码就不好说了。
  • 感谢您的回复。这个 exe-dll-dll 项目几周前还在工作。我将检查从一个项目传递到另一个项目的参数。
  • 您不应执行 exe。您应该从 VB6 IDE 运行 exe 项目。然后 IDE 将突出显示导致错误的行。

标签: dll vb6


【解决方案1】:

您必须拥有 EXE 和两个 DLL 的所有源代码。您将所有项目添加到单个组文件中,即 VBG。您必须在 EXE 项目中有对第一个 DLL 的引用。我不知道为什么你被告知必须删除它们。您必须在第一个 DLL 项目中引用第二个 DLL 项目。 VB 很聪明,可以默默地用项目引用替换 DLL 引用。如果您从项目组中删除 DLL 项目,那么将项目引用替换为 DLL 引用也很聪明。

确保您将错误处理设置为“Break on All Errors”或“Break in Class”。

类型不匹配错误可能发生在简单的事情中,例如将非数字字符串分配给数字变量。如果您传递对象引用,它会变得更加复杂。如果您看到此错误发生在以下情况:

Set myObject = someOtherObject

...看起来它们应该是同一类型,这可能会变得非常复杂。但首先,我会让你进行调试。

【讨论】:

【解决方案2】:

您可以使用在 Visual Basic 6.0 中创建的开源项目。它被称为“Debuggy v2”。这个项目有多个角色:

-调试器 -反汇编程序 -Windows 资源提取器 -文件十六进制编辑器 -窗口嗅探器 -API 间谍

全部合二为一。我可能对你需要的东西有用。

【讨论】:

    【解决方案3】:

    当开始在 VBG 中工作时,如果库引用不一致,可能会出现类型不匹配。一个库可能在 VBG 中引用另一个库;第二个可能是引用编译的版本。在它们之间传递对象可能会导致此错误。

    具体例子:

    • VBG 包含以下代码:A.DLL、B.DLL、C.DLL
    • A 在 VBG 中引用 B
    • C 引用 B 已编译
    • A 中的代码调用 C 中的代码,传递由 B 中的类定义的对象。
    • 类型不匹配

    C 应该在 VBG 中引用了 B。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      相关资源
      最近更新 更多