Results 1 to 3 of 3

Thread: How AddHandler from C# DLL to VB Proj

  1. #1

    Thread Starter
    New Member
    Join Date
    Oct 2016
    Posts
    4

    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'...

    Name:  Captura de pantalla 2016-11-27 14.31.52.jpg
Views: 613
Size:  10.1 KB

    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;
    Name:  Captura de pantalla 2016-11-27 14.35.50.jpg
Views: 555
Size:  7.8 KB

    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.

  2. #2
    You don't want to know.
    Join Date
    Aug 2010
    Posts
    4,578

    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.

  3. #3

    Thread Starter
    New Member
    Join Date
    Oct 2016
    Posts
    4

    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
  •  



Click Here to Expand Forum to Full Width