调用一个.net(C#)DLL调试VB6项目(Debugging VB6 project that

2019-08-17 12:32发布

我一直在树桩这个问题了几个小时了。 我希望有人有过类似的问题这一点。

我们使用VS2010开发的原型。NET(C#)DLL,并希望能够调用此DLL在两个C#应用程序和VB6应用。

我的问题是:

是否有可能调试正在调用一个NET的DLL VB6的应用程序? 我得到一个错误信息“ 自动化错误系统找不到指定的文件

该错误消息表明,有我的VB6应用程序找到NET的DLL若有所失。

我知道,如果VB6应用程序已被编译,.exe文件被创建,VB6的将成功地使用.exe文件时调用NET的DLL功能

然而,我们可以通过我们的VB6应用程序调试是非常重要的。 不幸的是调试不允许你迈过的代码实例化净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应用程序在开始调试之前。

Answer 1:

这不是一个问题,VB6使用它自己的调试器,不以任何其他调试器,包括管理的一个为C#代码的方式获得。

您可以从C#类库项目启动,确保它被选择作为启动项目。 项目+属性,调试选项卡。 选择“启动外部程序”选项,并输入到VB6 IDE的路径。 通常为C:\ Program Files文件\微软的Visual Studio \ VB98 \ VB6.EXE。 设置要调试方法的断点。

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

开始调试您的VB6项目照常进行。 一旦它开始使用自己的[标记有ComVisible特性] C#类,那么你的C#程序集被加载。 当你的VB6代码调用该方法的断点会打。 根据需要来回切换。 需要注意的是,你不能单步从VB6到C#代码,你必须设置断点,以获得调试器停止。



Answer 2:

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

  • 在VB6项目编译选项(使用生成项目对话框窗口上的选项按钮达到),选择本机代码编译, 没有优化创建符号调试信息选项。 然后编译VB6的项目。 这些选项允许适当VB6二进制到源映射。
  • 转至配置属性...调试解决方案的属性页,并更改开始行动 ,推出你的VB6可执行文件。
  • 在VS解决方案资源管理器中,转到文件...添加现有项目并导航到包含要调试VB6源代码的文件夹。 你要调试VB6的源代码文件,双击,和源窗口应在VS,使您可以设置在VB6源代码断点打开。
  • 请确保您的.NET库有一个公共的默认构造函数。 这是至关重要的。
  • 现在,还设置任何你需要的C#断点。 不要踏入.NET代码-这是行不通的。
  • 当您启动调试,VS,你的VB6和C#的断点应该可以正常打。


Answer 3:

一种方法是逐个调试每个:

  • 调试VB6的代码可以在IDE编译C#DLL和将其作为对VB6项目的引用之后进行。

  • 调试与VB6主机DLL通过编译VB6的项目,并在项目属性为可执行文件运行使用它是在Visual Studio可能。

在某些情况下,这是更简单/快于设置环境的同时,可以同时调试。

此方法需要有预先的每个工作至少框架。



文章来源: Debugging VB6 project that calls a .Net(C#) dll