【发布时间】:2009-05-12 06:59:58
【问题描述】:
我有一些 VB6 代码实例化一个类,该类处理从 VB.NET 组件引发的事件。 VB6 非常简单:
private m_eventHandler as new Collection
...
public sub InitSomething()
dim handler as EventHandler
set handler = new EventHandler
m_eventHandler.Add handler
...
m_engine.Start
end sub
请注意,事件处理程序对象必须超出 init 方法的范围(这就是它被存储在 Collection 中的原因)。另请注意,m_engine.Start 表示程序中 VB.NET 组件将开始引发事件的点。
实际的事件处理程序(按要求):
Private WithEvents m_SomeClass As SomeClass
Private m_object as Object
...
Private Sub m_SomeClass_SomeEvent(obj As Variant)
Set obj = m_object
End Sub
请注意,m_object 是在创建 EventHandler 的实例时初始化的。
引发事件的 VB.NET 代码更加简单:
Public ReadOnly Property SomeProp() As Object
Get
Dim obj As Object
obj = Nothing
RaiseEvent SomeEvent(obj)
SomeProp = obj
End Get
End Property
我的问题是,当我调试 VB6 程序时,第一次调用InitSomething,事件将不 被处理(VB6 事件处理程序永远不会输入)。对InitSomething 的后续调用确实有效。
当我在调试器之外运行程序时,一切正常。在这一点上,我什至不确定这是否是我应该担心的。
它可能相关也可能不相关,但 VB.NET 是使用 Visual Studio 代码转换工具从 VB6 转换而来的(随后手动清理)。
【问题讨论】:
-
你能显示实际的事件处理程序和处理对象的声明吗? (带有“WithEvents”的那个)?
标签: vb.net debugging events vb6