Reputation: 2669
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
Upvotes: 6
Views: 3206
Reputation: 2669
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
[ComSourceInterfaces(typeof(IHostEvents))]
[ClassInterface(ClassInterfaceType.None)]
[Guid("037CF765-4C30-4CF7-969C-1775E79844CE")]
public class Host : IHost
{
//IHost implementation
}
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("8C0C3F0E-5793-4E11-AB20-3A556C0B6790")]
public interface IHostEvents
{
[DispId(1)]
void EvalReceived(object sender, EvalReceivedEventArgs e);
}
Upvotes: 5
Reputation: 30398
You could try adding WithEvents
to your declaration of oHost
Private WithEvents oHost As HostService.IHost
Then the IDE should allow you to create event handlers on oHost
. It's just like making your Form_Load
event handler. The drop-down at the top-left of the code window should let you select oHost
.
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.
Upvotes: 4
Reputation: 41549
In VB6 you can use the AddressOf
operator to create the delegate implicitly:
oHost.add_EvalReceived AddressOf EvalReceivedEventHandler
Upvotes: 1