Zur Laufzeit Ressourcen aus beliebiger *.dll lade

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zur Laufzeit Ressourcen aus beliebiger *.dll lade

    Hallo liebe VB-Paradise Gemeinde,

    ich habe ein Programm welches über *.dll - Datein beliebig erweiterbar ist.
    Die DLL's enthalten eine Form und ein zugehöriges Icon (evtl. noch weitere Ressourcen falls nötig).
    Diese DLL's liegen in einem Unterordner und werden bei Programmstrat automatisch einem MenüToolStrip aufgelistet.
    Bei Klick auf das entsprechende ToolStripItem wird die Form aus der gewählte *.dll als MDI-Child aufgerufen.

    Edit: Die DLL's werden nicht per Verweis geladen.

    Nun möchte ich gern noch das beim Auflisten der DLL's ein Icon geladen wird und dieses dem ToolStrip-Eintrag zugefügt wird.

    Nach dem ich mit MSDN und Google nicht weiter gekommen bin hoffe ich das ihr mir eventl. helfe könnt.

    Vielen Dank schon mal für eure Beiträge,

    Grüße mcm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mcm“ ()

    Wird Dir nach dem Import von der IDE ein Eintrag
    MyDll.Ressources angezeigt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Kannst Du mal bitte ein paar Zeilen Code posten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    DLL's auflisten...

    VB.NET-Quellcode

    1. Private Sub Start_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim Dir As New IO.DirectoryInfo(Application.StartupPath & "\PlugIn")
    3. Dim File As IO.FileInfo
    4. For Each File In Dir.GetFiles("*.dll")
    5. PluginToolStripMenuItem.DropDownItems.Add(File.Name.Remove(File.Name.Length - 4, 4))
    6. Next
    7. AddHandler Me.PluginToolStripMenuItem.DropDownItemClicked, AddressOf ClickEvent
    8. End Sub

    ...ClickEvent ausführen...

    VB.NET-Quellcode

    1. Private Sub ClickEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs)
    2. ' Ermitteln, zu welchem Steuerelement das Ereignis gehört und Erstellen einer entsprechenden Meldung.
    3. Select Case True
    4. Case sender Is Me.PluginToolStripMenuItem
    5. dllName = e.ClickedItem.Text
    6. End Select
    7. CallDLLForm(Application.StartupPath & "\PlugIn\" & dllName & ".dll", "main")
    8. End Sub

    ...und die Form aufrufen...

    VB.NET-Quellcode

    1. Public Sub CallDLLForm(ByVal DLLpath As String, ByVal FormName As String)
    2. ' Ruft die Form [main] auf in einer DLL
    3. Dim DLLFilenameEx As String = Path.GetFileName(DLLpath)
    4. Dim Filename As String = Path.GetFileNameWithoutExtension(DLLpath)
    5. Try
    6. Dim A As [Assembly] = [Assembly].LoadFrom(DLLpath)
    7. Dim B As [Module] = A.GetModule(DLLFilenameEx)
    8. Dim C As Type = B.GetType(Filename & "." & FormName)
    9. Dim D As Form = DirectCast(Activator.CreateInstance(C), Form)
    10. D.MdiParent = Me
    11. D.Show()
    12. Catch ex As Exception
    13. MessageBox.Show(ex.Message.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    14. End Try
    15. End Sub


    ...ich hoffe das hilft weiter
    Da muss Dein PlugIn-Interface zunächst mal das Durchreichen der Ressourcen unterstützen und die DLLs müssen das implementieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Willst Du die DLL sowohl über PlugIn als auch per Verweis laden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    siehe Post #2 und #3, @fichz: und ich gingen davon aus, dass Du die DLL per Verweis lädtst, hattest Du in Deinem 1. Post vergessen zu erwähnen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Da muss Dein PlugIn-Interface zunächst mal das Durchreichen der Ressourcen unterstützen und die DLLs müssen das implementieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!