Rob*_*obC 1 .net vb.net vb6 com
我有一个带有一些.NET控件和.NET互操作类的VB6应用程序.我注意到的一件事是,当我从项目的已编译可执行文件中运行应用程序时,.NET类引发的事件只能在VB6代码中按预期处理.但是,当我通过VB6 IDE运行应用程序时,事件处理程序不会受到攻击 - 其中的代码甚至不会执行.(显然,断点不受打击.)
对于由互操作控件引发的事件,似乎不是这种情况 - 我可以为这些事件打破断点.只有"非控制"类才会出现此问题.
在设置和调用我的.NET Interop类的事件时,我按照这里的示例.
有没有人对此有任何想法?我在这里和MSDN上检查了一些帖子(比如这个和这个),但是我发现没有修复这些事件处理程序在调试时没有执行的问题.
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代码中看到出现问题.