从VB6 exe调试VB6 dll

时间:2011-11-01 21:00:38

标签: dll vb6

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

我读过Stackoverflow条目question about debugging VB6 dll

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

错误号码:13说明:类型不匹配

应用程序未生成错误。

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

3 个答案:

答案 0 :(得分:6)

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

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

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

Set myObject = someOtherObject

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

答案 1 :(得分:0)

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

-debugger -disassembler -Windows资源提取器 -file十六进制编辑器 - 窗口嗅探器 -API间谍

所有人都融为一体。我可能对你需要的东西很有用。

答案 2 :(得分:0)

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

具体例子:

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

C应该在VBG中引用B.