Public Interface IMonInterface 'événement clic pour le bouton Event MonEvent(ByVal sender As Object, ByVal e As EventArgs) 'affichage du formulaire dll Sub Affiche() End Interface
Imports MonInterface Imports System.Windows.Forms Imports System.Drawing Public Class Madll 'hérite de Form Inherits Form 'implémente l'interface Implements IMonInterface Friend WithEvents Button1 As System.Windows.Forms.Button Public Event MonEvent(ByVal sender As Object, ByVal e As System.EventArgs) Implements MonInterface.IMonInterface.MonEvent Sub New() InitializeComponent() End Sub Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button() Me.SuspendLayout() ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(85, 77) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(75, 23) Me.Button1.TabIndex = 0 Me.Button1.Text = "Button1" Me.Button1.UseVisualStyleBackColor = True ' 'Madll ' Me.ClientSize = New System.Drawing.Size(284, 262) Me.Controls.Add(Me.Button1) Me.Name = "Madll" Me.ResumeLayout(False) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click RaiseEvent MonEvent(sender, e) End Sub Public Sub Affiche() Implements MonInterface.IMonInterface.Affiche Me.Show() End Sub End Class
Imports MonInterface Imports System.Reflection Public Class Form1 Dim WithEvents Plugin As IMonInterface Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim asm As Assembly = Assembly.LoadFrom("chemin_de_la_dll\MaDll.dll") Dim mesTypes() As System.Type = asm.GetTypes() Dim monType As System.Type = Nothing For Each tp As Type In mesTypes If tp.Name.StartsWith("Madll") Then monType = asm.GetType(tp.FullName) Exit For End If Next Dim assign As Boolean = GetType(IMonInterface).IsAssignableFrom(monType) If assign Then Plugin = CType(Activator.CreateInstance(monType), IMonInterface) 'on abonne ici l'événement du bouton AddHandler Plugin.MonEvent, AddressOf SubMonEvent 'on affiche le formulaire de la dll Plugin.Affiche() 'note que l'événement 'MonEvent' ainsi que la sub 'Affiche() apparaissent tous deux dans l'interface End If End Sub 'sub exécutée lors du clic sur le bouton du formulaire dll Private Sub SubMonEvent(ByVal sender As Object, ByVal e As EventArgs) MessageBox.Show("le bouton dll a été pressé") End Sub End Class
Implements ITonInterfacedans ta ou tes dll.
Friend WithEvents MySender Asclass x qui existe dans la dll
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPublic Class Form1 Private dllClass As Object Private AppPath As String = "path du Dll" Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load AddHandler dllClass._addDefault, AddressOf EventHandler dllClass = GetAssemblyInstance("Nom du DLL", "Nom du Class") End Sub Public Function GetAssemblyInstance(ByVal dllName As String, ByVal className As String) As Object Dim TYP As Type Dim fullPath As String = AppPath & dllName & ".dll" If System.IO.File.Exists(fullPath) Then Dim asm As Assembly = Assembly.LoadFrom(fullPath) TYP = asm.GetType(dllName & "." & className) Return Activator.CreateInstance(TYP) End If Return Nothing End Function Sub EventHandler() ' Handle the event. MsgBox("EventHandler caught event.") End Sub End Class
Public Class Class1 ' Declare an event. Public Event Ev_Event() Sub CauseSomeEvent() ' Raise an event. RaiseEvent Ev_Event() End Sub End Class
Private dllClass As New Class1(le type Class1 est inaccesible) car j'utilise