调试调用.net (c#) dll的VB6项目

本文关键字:dll VB6 项目 调用 net 调试 | 更新日期: 2023-09-27 18:03:42

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

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

我的问题是:

是否有可能调试调用。net dll的VB6应用程序?我得到一个错误消息"自动化错误系统找不到指定的文件"

错误信息提示我的VB6应用程序查找. net dll时缺少一些东西。

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

然而,重要的是我们可以通过VB6应用程序进行调试。不幸的是,调试不允许您跳过实例化. net DLL的类对象的代码行。我好像做不到。

注意:我已经看了周围的论坛和MSDN文档,我大多找到在。net中调用VB6 dll的解决方案;不幸的是,这与我们需要做的恰恰相反。

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

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

site1site2

如果有人能给我任何建议或指导我在哪里可以得到一个,那就太好了。

感谢<<p> 解决方案/strong>感谢@HansPassant,我找到了解决办法。要调试包含c# . net程序集的VB6项目,您需要通过"regasm"answers"gacutil"注册。net dll,然后确保在开始调试之前关闭并重新打开VB6应用程序。

调试调用.net (c#) dll的VB6项目

这不是问题,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#代码,你必须设置断点让调试器停止。

啊,在VB6中以可调试的方式使用。net的奇妙之处。

    在VB6项目编译选项(使用"创建项目"对话框窗口上的"选项"按钮)中,选择编译到本地代码不优化创建符号调试信息选项。然后编译你的VB6项目。这些选项允许正确的VB6二进制到源代码的映射。
  • 转到配置属性…解决方案的调试属性页,并更改Start Action以启动您的VB6可执行文件。
  • 在VS解决方案资源管理器中,点击File…添加"现有项目"并导航到包含要调试的VB6源代码的文件夹。双击你想调试的VB6源代码文件,在VS中打开一个源窗口,允许你在VB6源代码中设置断点。
  • 确保你的。net库有一个公共的默认构造函数。
  • 现在还可以设置任何需要的c#断点。让而不是步进到。net代码中——这行不通。
  • 当你开始调试VS,你的VB6和c#断点应该正常命中。

一种方法是分别调试:

  • 调试VB6代码可以在IDE中编译c# DLL并将其添加为VB6项目的参考后完成。

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

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

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