Ich schreibe ein Programm und möchte, dass das Programm Plugins unterstützt. Ich habe eine Schnittstelle erstellt, die das Programm implementieren muss. Ich verwende den folgenden Code aus meinem Hauptprogramm das Plugin zu nennen:Dynamisch geladene .NET Assemblies
Dim asm As Assembly = Assembly.LoadFrom(ff.FullName)
' Get the type
Dim myType As System.Type = asm.GetType(asm.GetName.Name + "." + asm.GetName.Name)
' If the type is null then we try again without the root namespace name
If myType Is Nothing Then myType = asm.GetType(asm.GetName.Name)
' Check to see if the plugin implements the required Interface
Dim IsMyPlugin As Boolean = GetType(LGInterfaces.ILGSQLPlugin).IsAssignableFrom(myType)
Dim ActivePlugin As New PluginObject()
If IsMyPlugin Then
ActivePlugin.Plugin = CType(Activator.CreateInstance(myType), LGInterfaces.ILGPlugin)
Jedes Ding funktioniert und ich bin in der Lage meine ausgesetzten Eigenschaften zuzugreifen, außer für ein Problem kann ich nicht herausfinden. In meiner Plugin verwende ich den folgenden Code ein Objekt zu belichten:
Private m_PanelObject As Windows.Forms.Control
Public Property PanelObject() As Windows.Forms.Control
Get
Return m_PanelObject
End Get
Set(ByVal value As Windows.Forms.Control)
m_PanelObject = value
End Set
Ok, so dass ich diese Eigenschaft von meinem Hauptprogramm und alles funktioniert. Außer, nach einiger Zeit wird m_PanelObject aus irgendeinem Grund auf Nothing gesetzt. Ich setze es nirgendwo in meinem Programm auf "Nothing" und es gibt keinen Platz im Plugin-Code, der es auf Nothing setzt. Also was fehlt mir hier? Ich bin mir sicher, dass das ziemlich offensichtlich sein wird. Vielen Dank im Voraus
Können Sie ein Beispiel aus Ihrem Hauptprogramm angeben, insbesondere wo die Zeile, in der die Ausnahme ausgelöst wird? – Galilyou
Die folgende Zeile wird aus dem Hauptprogramm aufgerufen: Plugin.Plugin.DataWriteHeader (FileWriter, "TestTable") Dies ist ein Sub im Plugin. Das Plugin selbst ist der Ort, an dem die Ausnahme ausgelöst wird. –