我有一个带有一些.NET控件和.NET互操作类的VB6应用程序。我注意到的一件事是,当我从项目的已编译可执行文件中运行应用程序时,.NET类引发的事件只能在VB6代码中按预期处理。但是,当我通过VB6 IDE运行应用程序时,事件处理程序不会受到攻击 - 其中的代码甚至不会执行。 (显然,断点不会受到打击。)
对于由互操作控件引发的事件,似乎不是这种情况 - 我可以为这些事件点击断点。只有“非控制”类才有这个问题。
在设置和调用.NET Interop类的事件时,我遵循了示例here。
有没有人对此有任何想法?我在这里和MSDN上查看了一些帖子(例如this和this),但我发现没有修复这些事件处理程序在调试时没有执行的问题。
答案 0 :(得分:5)
VB6 IDE是托管代码的一个非常恶劣的地方。它不会尝试模拟一个进程,就像从编译版本运行应用程序时那样。因此,您使用的任何.config文件都不起作用,CLR没有希望找到任何依赖程序集,并且您在没有托管调试程序的情况下就像一只蝙蝠一样盲目。在代码中添加了太多的Try / Catch语句,你无法找到代码无效的原因。
您必须以不同方式执行此操作并使用托管调试器。你可以仍然使用VB6调试器,它的缺点也是一个优点,它不会妨碍托管调试器。
Project + Properties,Debug选项卡。选择“启动外部程序”单选按钮,然后选择c:\ program files \ microsoft visual studio \ vb98 \ vb6.exe。您可以将“命令行参数”设置为.vbp项目的路径(如果有)。按F5启动调试器。
启动VB6 IDE。您可以像平常一样在.NET代码中设置断点。每当VB6语句调用你的[ComVisible]代码时,这样的断点就会命中,所以你可以调试它。使用Debug + Exceptions,勾选CLR Exceptions的Thrown复选框,这样你就可以在.NET代码中看到出错的地方。