I need to get be able to handle a .net event in VB6. So far i have it set up by making me c# class COM visible. My VB6 object can call methods on it fine but now i need some way to communicate from .net to VB. If i add an event to my c# class the .net wrapper seems to add an add_EventName and remove_EventName which i assume this is to subscribe and unsubscribe to the event. But i'm still a novice when it comes to VB6 and come so i'm not really sure how to use it.
The add_EventName seems to take an EventNameEventHadler but what do i give it? i tried the sub but this gives me a runtime error. Anyone know how to use this? Here is an example of what i have
Private oHost As HostService.IHost
Private Sub Form_Load()
Set oHost = New HostService.Host
oHost.Start
oHost.add_EvalReceived EvalReceivedEventHandler
End Sub
Private Sub EvalReceivedEventHandler(ByVal sender As Variant, ByVal e As EvalReceivedEventArgs)
MsgBox "Eval Received in VB: " & e.Eval.TimeSent & ":" & e.Eval.FirstName & " " & e.Eval.LastName & " - " & e.Eval.Comments
End Sub
So oHost.add_EvalReceived line is wrong
Ok i got it working with help from MarkJ. I had to have an interface that represents my events for COM. So they ended up looking like this
In VB6 you can use the
AddressOf
operator to create the delegate implicitly:You could try adding
WithEvents
to your declaration ofoHost
Then the IDE should allow you to create event handlers on
oHost
. It's just like making yourForm_Load
event handler. The drop-down at the top-left of the code window should let you selectoHost
.Disclaimer: I've used this many times to handle events from COM objects. I've never actually tried handling events from a .Net object through interop, but I would think you must do it like this.