AddressOf 运算符 VB6 的使用无效

Invalid use of AddressOf operator VB6

我的第一个 post 在这里。

我有 c# .dll,用于扫描仪。 我打算将它与一些遗留的 vb6 应用程序一起使用。

.dll 使用 RaiseArgs 通过扫描的代码引发事件。

我正在尝试编写用于 VB6 应用程序的 .ocx 库。

为了在 .ocx 库中捕获此事件,我正在尝试调整此代码:

Sub TestEvents()
    Dim Obj As New Class1
    ' Associate an event handler with an event.
    AddHandler Obj.Ev_Event, AddressOf EventHandler
    ' Call the method to raise the event.
    Obj.CauseSomeEvent()
    ' Stop handling events.
    RemoveHandler Obj.Ev_Event, AddressOf EventHandler
    ' This event will not be handled.
    Obj.CauseSomeEvent()
End Sub

Sub EventHandler()
    ' Handle the event.
    MsgBox("EventHandler caught event.")
End Sub

Public Class Class1
    ' Declare an event.
    Public Event Ev_Event()
    Sub CauseSomeEvent()
        ' Raise an event.
        RaiseEvent Ev_Event()
    End Sub
End Class

但是我越来越 调用时无效使用 AddressOf 运算符错误:AddHandler Obj.Ev_Event, AddressOf EventHandler

此错误的可能原因是什么?

我怀疑我没有朝着正确的方向解决这个任务,所以这是解决这个问题的更好方法吗?

我认为您混合使用了 VB6 和 VB.NET。在 VB6 中,如果您想为您自己创建的对象上的事件添加一个事件处理程序(而不是使用 Forms 设计器添加),您可以这样做:

Private WithEvents mObjectThatHasEvents As Class1

Private Sub StartListeningToEvents()

   If mObjectThatHasEvents Is Nothing Then
      Set mObjectThatHasEvents = New Class1
   End If

End Sub

Private Sub TriggerEvent()
   mObjectThatHasEvents.CauseSomeEvent
End Sub

'Assumes that Class1 has an event called "MyEvent".  
Private Sub mObjectThatHasEvents_MyEvent()
   MsgBox("EventHandler caught event.")
End Sub

Private Sub StopListeningToEvents()
   Set mObjectThatHasEvents = Nothing
End Sub

如果您需要在不监听其事件的情况下保持事件源对象处于活动状态,您将需要通过不是 "WithEvents".

的变量对其进行第二次引用

我应该指出 VB6 IDE 将识别事件源。在代码窗格中,使用顶部的下拉菜单 select 对象和事件。 IDE 会自动为您存根(就像按钮或其他任何东西一样)。

tcarvin 几乎解释了你必须做什么,但这是你的代码,经过调整:

Private WithEvents mObjWithEvents As Class1

Sub TestEvents()
    Dim Obj As New Class1

    Set mObjWithEvents = Obj

    ' Call the method to raise the event.
    Obj.CauseSomeEvent

    ' Stop handling events.
    Set mObjWithEvents = Nothing

    ' This event will not be handled.
    Obj.CauseSomeEvent

End Sub

Private Sub mObjWithEvents_EvEvent()
    ' Handle the event.
    MsgBox ("EventHandler caught event.")
End Sub

还有你的 Class1:

Public Event EvEvent()

Public Sub CauseSomeEvent()
    ' Raise an event.
    RaiseEvent EvEvent
End Sub

请注意,Ev_Event 已重命名为 EvEvent。