Announcement

Collapse
No announcement yet.

Formular/Menueinträge in DLL als Plugin laden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Formular/Menueinträge in DLL als Plugin laden

    Hi,

    ich habe mal wieder ein kleines anliegen und hoffe ihr könnt mir weiter helfen.

    Ich möchte gern in meinem Programm während der Laufzeit Menüeinträge erzeugen und bei einem Klick darauf das ein Fenster (als MDI Child) geladen wird.
    D.h. Die Anwendung soll aus der DLL informationen erhalten wo sie welche Menüeinträge erzeugen soll, diese wiederum Laden das entsprechende Fenstern. (alles dynamisch)
    Nach etwas Recherche kann man dies mit einem Plugin System realsieren. Jedoch habe ich kein Beispiel gefunden wo ein Formular verwendet wird.
    Und mein "rum probieren" ist auch wenig erfolgreich, da zwar das Formular erzeugt und angezeigt wird, jedoch sich nicht mehr schließen lässt.

    Ich hoffe mir kann jemand mit ein paar Tipps weiterhelfen, ein Link zu einem Tutorial wäre gut.

    Ich verwende den TCB C++ 2006

    Mfg
    Stephan

  • #2
    Ich habe hier noch ein Programm rumliegen, welches Menüeinträge und Childs dynamisch erzeugt; allerdings nicht aus einer DLL oder aus einem "PlugIn". Warum das dazu erforderlich ist, weiß ich nicht
    Christian

    Comment


    • #3
      Das erzeugen der Menüeinträge bzw. Childs während der Laufzeit ist auch nicht das Problem. Nur soll es dann passieren, wenn die entsprechende DLL geladen wird. Da bei einer Erweiterung blos die DLL hinzugefügt und das Hauptprogramm nicht immer mit angepasst werden muss.

      Gruß

      Stephan

      Comment


      • #4
        Wo ist dann das Problem?

        Dafür schafft man sich eine Schnittstelle, die die DLLs implementieren müssen und die lieftert dann den Namen es Menüeintrag, den Namen des Fensters, welches auferufen wird usw. Hier steht was zu Formularen in einer DLL http://www.marquardtnet.info/cecke/t...%20einer%20DLL
        Christian

        Comment


        • #5
          Genau an der Schaffung der Schnittstelle liegt derzeit mein Problem.

          Im Moment habe ich es so gelöst:

          Im Programm:
          Code:
          hDll = LoadLibrary("Test.dll");
          if(hDll)
          {
           DLLFKTP fkt = NULL;
          
           fkt = (DLLFKTP) GetProcAddress(hDll, "_PluginInit");
           //fmMainMenu ist die Menuleiste im Programm
           fkt(fmMainMenu);
          
          }
          Die Funktion PluginInit in der DLL:
          Code:
          extern "C" _declspec(dllexport) void PluginInit (TMainMenu *MMenu)
          {
          	TMenuItem *Menu = new TMenuItem(MMenu);
          	TMenuItem *Entry = new TMenuItem(Menu);
          	TMenuItem *Sep = new TMenuItem(Menu);
          	TMenuItem *Entry2 = new TMenuItem(Menu);
          
          	Menu->Caption = "Menu1";
          	Entry->Caption = "Eintrag1";
          	Entry->OnClick = Form1->Entry1Click;
          	Sep->Caption = "-";
          	Entry2->Caption = "Eintrag2";
          
          	int i = MMenu->Items->Count;
          	MMenu->Items->Insert(i, Menu);
          	Menu->Insert(0, Entry);
          	Menu->Insert(1, Sep);
          	Menu->Insert(2, Entry2);
          
          	if(DirectoryExists(ExtractFileDir(Application->Name) + "data"))
          	{
          
          	}
          
          }
          Das klappt auch soweit, nur das sonstige Komponenten die in MDIForm lieg über dem Child angezeigt werden.
          Und die derzeitige Lösung finde ich auch unelegant.

          Gruß Stephan

          Comment


          • #6
            Berücksichtige, dass keiner deine Anwendung kennt und keiner weiß was du machen willst. Ich weiß nicht wo da ein Child ist (woher kommen da Komponenten?) und wo da was zu sehen sein könnte. Ggf. abstrahiere das Problem und beschreibe es Ich würde es realiseren, in dem die DLL nur die Daten bereitstellt, wie das Menü auszusehen hat. Die konkrete Erzeugung würde das Hauptprogramm machen. Man nutzt dafür ein Interface http://blog.axxg.de/2012/07/c-interface-implemenierung/
            Christian

            Comment

            Working...
            X