8

我已经被这个问题困扰了几个小时了。我希望有人遇到过类似的问题。

我们使用 VS2010 开发了一个原型 .Net(C#) dll,并且希望能够在 C# 应用程序和 VB6 应用程序中调用这个 dll。

我的问题是:

是否可以调试调用 .Net dll 的 VB6 应用程序?我收到一条错误消息“自动化错误系统找不到指定的文件

错误消息表明我的 VB6 应用程序缺少某些东西来查找 .Net dll。

我知道如果 VB6 应用程序已经编译,并且 .exe 已经创建,VB6 将在使用 .exe 时成功调用 .Net dll 功能

然而,重要的是我们可以通过我们的 VB6 应用程序进行调试。不幸的是,调试不允许您跳过实例化 .Net DLL 的类对象的代码行。我似乎无法做到这一点。

注意:我查看了论坛和 MSDN 文档,主要是找到在 .NET 中调用 VB6 dll 的解决方案;不幸的是,这与我们需要做的相反。

注意:我已经注册了编译好的 .Net(C#) 程序集,并在 VB6 项目中引用了它。

然而,我找到了这两个页面,这似乎是我们需要的,但它是调用使用 VS2005 生成的 .NET(c#) dll 的解决方案。当使用 VS2010 生成 .NET(C#) dll 时,这似乎不起作用。

站点 1 站点 2

如果有人可以提出任何建议或指导我到我能得到的地方,那就太好了。

谢谢

解决方案 感谢@HansPassant,我找到了解决方案。要调试包含 C# .NET 程序集的 VB6 项目,您需要通过“ regasm ”和“ gacutil ”注册 .NET dll,然后确保在开始调试之前关闭并重新打开 VB6 应用程序。

4

3 回答 3

12

这不是问题,VB6 使用自己的调试器,不会妨碍任何其他调试器,包括用于 C# 代码的托管调试器。

你从你的 C# 类库项目开始,确保它被选为开始项目。项目 + 属性,调试选项卡。选择“启动外部程序”选项并输入 VB6 IDE 的路径。通常是 c:\program files\microsoft visual studio\vb98\vb6.exe。在要调试的方法上设置断点。

按 F5,VB6 IDE 将开始运行。加载或创建您的 vb6 项目。请注意如何在上一步中添加 .vbp 项目的路径,以便它自动加载您的项目。

像往常一样开始调试您的 vb6 项目。一旦它开始使用您的 [ComVisible] C# 类,您的 C# 程序集就会被加载。当您的 vb6 代码调用该方法时,将触发断点。根据需要来回切换。请注意,您不能单步执行从 vb6 到 C# 代码,您必须设置断点以使调试器停止。

于 2013-03-12T14:10:28.777 回答
3

啊,以可调试方式从 VB6 使用 .NET 的奇迹。

  • 在 VB6 项目编译选项(使用 Make Project 对话框窗口上的 Options 按钮到达)中,选择 Compile to Native CodeNo OptimizationCreate Symbolic Debug Info选项。然后编译您的 VB6 项目。这些选项允许正确的 VB6 二进制到源映射。
  • 转到解决方案的配置属性...调试属性页并更改启动操作以启动您的 VB6 可执行文件。
  • 在 VS 解决方案资源管理器中,转到 File...Add Existing Item 并导航到包含要调试的 VB6 源代码的文件夹。双击要调试的 VB6 源代码文件,应在 VS 中打开一个源窗口,允许您在 VB6 源代码中设置断点。
  • 确保您的 .NET 库具有公共默认构造函数。这是必不可少的。
  • 现在还设置您需要的任何 C# 断点。不要进入 .NET 代码 - 这不起作用
  • 当您开始使用 VS 进行调试时,您的 VB6 和 C# 断点应该会正常命中。
于 2013-03-12T14:14:45.353 回答
1

一种方法是单独调试每个:

  • 编译 C# DLL 并将其添加为对 VB6 项目的引用后,可以在 IDE 中调试 VB6 代码。

  • 通过编译 VB6 项目并在项目属性中将其用作要运行的可执行文件,可以在 Visual Studio 中使用 VB6 主机调试 DLL。

在某些情况下,这比设置环境以同时调试两者更简单/更快。

这种方法至少需要事先准备好每个工作的框架。

于 2013-03-12T13:34:31.723 回答