-
Nov 27th, 2016, 01:42 PM
#1
Thread Starter
New Member
How AddHandler from C# DLL to VB Proj
Someone know how addhandlers from C# DLL to VB App. When I try to use AddHandler into my VB project, the Visual Studio returns:
Error BC30676 'DebugMessageEvent' is not an event of 'Debugger'...
If I go to the 'DebugMessageEvent' definition from VB Proj (Auto-Converted from the DLL called DLLNAMESPACE), I get the follow code:
Code:
Public Class Debugger
Public DebugMessageEvent As EventHandler(Of DebugMessageArgs)
Public Shared ReadOnly Property Instance As Debugger
Public Class DebugMessageArgs
Inherits EventArgs
Public Sub New()
Public Property Message As Object
End Class
End Class
The VB Project (Doesn't Work)
Code:
AddHandler Instance.DebugMessageEvent, AddressOf console_DebugMessageEvent
Another C# project (Works)
Code:
Debugger.Instance.DebugMessageEvent += console_DebugMessageEvent;
The DLL C# Code
Code:
public sealed class Debugger
{
private static readonly Lazy<Debugger> instance = new Lazy<Debugger>(() => new Debugger());
private Debugger()
{
}
public static Debugger Instance
{
get { return instance.Value; }
}
public EventHandler<DebugMessageArgs> DebugMessageEvent;
public class DebugMessageArgs : EventArgs
{
public object Message { get; set; }
}
private void RaiseDebugMessageEvent(object message)
{
DebugMessageEvent?.Invoke(this, new DebugMessageArgs
{
Message = message
});
}
internal void DebugMessage(object data)
{
RaiseDebugMessageEvent(data);
}
}
All the rest of DLL functions works as expected.
Last edited by eliaspizarro; Nov 27th, 2016 at 03:43 PM.
-
Nov 27th, 2016, 04:11 PM
#2
Re: How AddHandler from C# DLL to VB Proj
It's not actually declared as an event, for some curious reason. If it were an event, it would look like:
Code:
public event EventHandler<DebugMessageArgs> DebugMessageEvent;
Since it's not an event, it's just a delegate field, and that means AddHandler/RemoveHandler won't work with it. You'll have to do something janky like:
Code:
Dim handler As New EventHandler(Of DebugMessageEventArgs)(AddressOf yourHandler)
Debugger.Instance.DebugMessageEvent = handler
This isn't a "C# to VB" problem, this is a "the person writing the code made a bad mistake" problem.
-
Nov 27th, 2016, 05:03 PM
#3
Thread Starter
New Member
Re: How AddHandler from C# DLL to VB Proj
When I try your code with:
Code:
Imports DLLNAMESPACE
Public Class myclass
...
Dim fixDebugMessageEvent As New EventHandler(Of Debugger.DebugMessageArgs)(AddressOf console_DebugMessageEvent)
Private Sub backup(...)
Debugger.Instance.DebugMessageEvent = fixDebugMessageEvent
...
End Sub
...
Private Sub console_DebugMessageEvent(sender As Object, e As Debugger.DebugMessageArgs)
Console.WriteLine("Consola RoboSharp: " & e.Message)
End Sub
...
End Class
also with:
Code:
Imports DLLNAMESPACE
Public Class myclass
...
Private Sub backup(...)
Debugger.Instance.DebugMessageEvent = New EventHandler(Of Debugger.DebugMessageArgs)(AddressOf console_DebugMessageEvent)
...
End Sub
...
Private Sub console_DebugMessageEvent(sender As Object, e As Debugger.DebugMessageArgs)
Console.WriteLine("Consola RoboSharp: " & e.Message)
End Sub
...
End Class
I get a new error:
Code:
Exception thrown: 'System.InvalidOperationException' in System.dll
Maybe I should mod the DLL code
Thanks,
Last edited by eliaspizarro; Nov 27th, 2016 at 05:24 PM.
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|