Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么.NET互操作事件处理程序在VB6 IDE中没有被命中?_.net_Vb.net_Com_Vb6 - Fatal编程技术网

为什么.NET互操作事件处理程序在VB6 IDE中没有被命中?

为什么.NET互操作事件处理程序在VB6 IDE中没有被命中?,.net,vb.net,com,vb6,.net,Vb.net,Com,Vb6,我有一个带有一些.NET控件和.NET互操作类的VB6应用程序。我注意到的一件事是,当我从项目编译的可执行文件运行应用程序时,.NET类引发的事件只能在VB6代码中得到预期的处理。但是,当我通过VB6 IDE运行应用程序时,事件处理程序不会被击中,其中的代码甚至不会执行。显然,断点不会被击中 对于互操作控件引发的事件,情况似乎并非如此——我可以找到这些事件的断点。只有非控制类才有此问题 我在设置和调用.NET互操作类的事件时遵循了这个示例 有人对此有什么想法吗?我在这里和MSDN上查看了一些帖子

我有一个带有一些.NET控件和.NET互操作类的VB6应用程序。我注意到的一件事是,当我从项目编译的可执行文件运行应用程序时,.NET类引发的事件只能在VB6代码中得到预期的处理。但是,当我通过VB6 IDE运行应用程序时,事件处理程序不会被击中,其中的代码甚至不会执行。显然,断点不会被击中

对于互操作控件引发的事件,情况似乎并非如此——我可以找到这些事件的断点。只有非控制类才有此问题

我在设置和调用.NET互操作类的事件时遵循了这个示例


有人对此有什么想法吗?我在这里和MSDN上查看了一些帖子,如和,但我没有发现任何东西可以解决这些事件处理程序在调试时无法执行的问题。

VB6 IDE对于托管代码来说是一个非常不利的地方。它不会试图模拟一个过程,就像从编译版本运行应用程序时的那种过程。因此,您使用的任何.config文件都不起作用,CLR不可能找到任何依赖程序集,并且如果没有托管调试器,您将是一个盲蝙蝠。在代码中加入太多的Try/Catch语句,您就没有希望找出代码不起作用的原因

您必须以不同的方式执行此操作,并使用托管调试器。您仍然可以使用VB6调试器,它的缺点也是一个优点,它不会妨碍托管调试器

项目+属性,调试选项卡。选择“启动外部程序”单选按钮,然后选择c:\program files\microsoft visual studio\vb98\vb6.exe。可以将命令行参数设置为.vbp项目的路径(如果有)。按F5启动调试器


这将启动VB6 IDE。您可以像平常一样在.NET代码中设置断点。每当VB6语句调用[ComVisible]代码时,都会命中这样一个断点,以便您可以对其进行调试。使用Debug+Exceptions,勾选CLR Exceptions的“抛出”复选框,以便您总能看到.NET代码中出现错误。

VB6 IDE对于托管代码来说是一个非常不利的地方。它不会试图模拟一个过程,就像从编译版本运行应用程序时的那种过程。因此,您使用的任何.config文件都不起作用,CLR不可能找到任何依赖程序集,并且如果没有托管调试器,您将是一个盲蝙蝠。在代码中加入太多的Try/Catch语句,您就没有希望找出代码不起作用的原因

您必须以不同的方式执行此操作,并使用托管调试器。您仍然可以使用VB6调试器,它的缺点也是一个优点,它不会妨碍托管调试器

项目+属性,调试选项卡。选择“启动外部程序”单选按钮,然后选择c:\program files\microsoft visual studio\vb98\vb6.exe。可以将命令行参数设置为.vbp项目的路径(如果有)。按F5启动调试器


这将启动VB6 IDE。您可以像平常一样在.NET代码中设置断点。每当VB6语句调用[ComVisible]代码时,都会命中这样一个断点,以便您可以对其进行调试。使用Debug+Exceptions,勾选CLR Exceptions的“抛出”复选框,以便您总能看到.NET代码中出现错误。

好的,谢谢。从您的回答听起来,似乎没有真正的希望能够在这些处理程序方法中找到一个断点。你知道为什么它适用于.NET控件的事件处理程序吗?我完全不是这么说的。请重读答案。最重要的是,试一试。很抱歉没有说得更清楚。我确实试过你说的。如上所述,通过我通过VS启动的VB6 IDE运行我的应用程序时,VB6事件处理程序代码仍然没有被命中。我看到了与我在第一篇文章中描述的相同的行为。因此,在.NET代码中触发事件的代码上设置一个断点。从那里回去工作。谢谢你再次回复我,谢谢你在这件事上花了这么多时间。我已经在.net代码中设置了断点。它被击中了,但是没有证据表明我的VB6代码被击中了。VB6事件处理程序中的功能将被忽略,并且不会命中VB6断点。代码在调试中仍然没有命中。我在引发事件的.NET项目中启用了非托管代码的调试,但这似乎没有效果。无论如何,我认为它正在尝试调试VB6.exe,因为这是附加的进程。好的,谢谢。从您的回答听起来,似乎没有真正的希望能够在这些处理程序方法中找到一个断点。你知道为什么它适用于.NET控件的事件处理程序吗?我完全不是这么说的。请重读答案。最重要的是,试一试。很抱歉没有这么做
清楚的我确实试过你说的。如上所述,通过我通过VS启动的VB6 IDE运行我的应用程序时,VB6事件处理程序代码仍然没有被命中。我看到了与我在第一篇文章中描述的相同的行为。因此,在.NET代码中触发事件的代码上设置一个断点。从那里回去工作。谢谢你再次回复我,谢谢你在这件事上花了这么多时间。我已经在.net代码中设置了断点。它被击中了,但是没有证据表明我的VB6代码被击中了。VB6事件处理程序中的功能将被忽略,并且不会命中VB6断点。代码在调试中仍然没有命中。我在引发事件的.NET项目中启用了非托管代码的调试,但这似乎没有效果。无论如何,我认为它试图调试VB6.exe,因为那是附加的进程。