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'...
The Debugger.Instance.DebugMessageEvent is a part of a DLL called DLLNAMESPACE with his own class called Debugger and send information about the others methods and process from their other classes within DLL called DLLNAMESPACE
If I go to the 'DebugMessageEvent' definition from VB Proj (Auto-Converted from the DLL called DLLNAMESPACE), I get the follow 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)
Imports DLLNAMESPACE
Public Class myclass
...
Private Sub backup(...)
AddHandler Debugger.Instance.DebugMessageEvent, AddressOf console_DebugMessageEvent
...
End Sub
...
Private Sub console_DebugMessageEvent(sender As Object, e As Debugger.DebugMessageArgs)
Console.WriteLine(e.Message)
End Sub
...
End Class
Another C# Project (Works)
using DLLNAMESPACE;
public partial class myclass : Form
{
...
private void backup()
{
Debugger.Instance.DebugMessageEvent += console_DebugMessageEvent;
...
}
...
void console_DebugMessageEvent(object sender, Debugger.DebugMessageArgs e)
{
Console.WriteLine(e.Message);
}
...
}
The DLL C# Code
using System;
namespace DLLNAMESPACE
{
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. Please advice, I don't want to change the code of the DLL, just the VB.NET code
Some unsuccessful tests
Pass Visual Studio verification, but others background process associated to DLLNAMESPACE closes.
New EventHandler
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
DirectCast
Imports DLLNAMESPACE
Public Class myclass
...
Private Sub backup(...)
Debugger.Instance.DebugMessageEvent = DirectCast(System.Delegate.Combine(Debugger.Instance.DebugMessageEvent, DirectCast(AddressOf console_DebugMessageEvent, EventHandler(Of Debugger.DebugMessageArgs))), EventHandler(Of Debugger.DebugMessageArgs))
...
End Sub
...
Private Sub console_DebugMessageEvent(sender As Object, e As Debugger.DebugMessageArgs)
Console.WriteLine("Consola RoboSharp: " & e.Message)
End Sub
...
End Class
If someone have time to recreate my problem, try using robosharp from nuget and add it to your vb.net project