Announcement

Collapse
No announcement yet.

TForm aus einer DLL ansprechen?

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

  • TForm aus einer DLL ansprechen?

    Weiß zufällig jemand wie man aus einer DLL heraus z. B. eine TForm anspricht um mit dieser Form dann verschiedene Aktionen ausführen zu können?

    Wäre euch sehr verbunden, Danke im Voraus

    Gruß Roman

  • #2
    Hi,

    <pre>
    du bindest die cpp (die, die dein Formular enthält) mit in dein DLL Projekt.
    USEFORM("formfile.cpp", Form1);
    und dementsprechend auch die Header
    #include "formfile.h"

    In der DLL erzeugst du nun eine Funktion zum anzeigen der Form
    extern "C" __declspec(dllexport) void ShowForm()
    {
    TForm1 *Form = new TForm1(NULL);
    Form->ShowModal();
    delete Form;
    }

    In deinem Haupprojekt bindest du die LIB Datei, die bei der Herstellung der DLL erzeugt wurde ein.(über Projekt | dem Projekt hinzufügen) Und machst die Funktion gültig.

    extern "C" __declspec(dllimport) void ShowForm();

    Zuletzt rufdst du die Methode auf u7nd dein Formular wird angezeigt.

    void __fastcall TFormhaupt::Button1Click(TObject *Sender)
    {
    ShowForm();
    }

    </pre>

    Ich hoffe, dass ich dir helfen konnte.

    Philip

    Comment


    • #3
      Super. Danke Philipp. Du hast mir sehr geholfen.

      Gruß Roma

      Comment


      • #4
        Hallo Philipp,

        kann es sein, daß man die gesamte CPP-Datei in das DLL Projekt einbinden muß. Dadurch bläht sich ja die DLL unwahrscheinlich auf. Zuerst habe ich es mit USEFORM("MainU.cpp", Form1) probiert, aber da kamen immer Fehlermeldungen (Unresolved external from ...).

        Als ich aber die CPP-Datei mittels Add to Project hinzugefügt habe, hat es funktioniert. Aber dann dachte ich mir, dann brauche ich ja keine DLL, da kann ich ja die Funktion gleich in das Hauptprojekt reinschreiben.

        Gruß Roma

        Comment


        • #5
          Hi,

          wie meinst du das, du brauchst keine DLL mehr ins Hauptprojekt reinschreiben? Wenn du d die Funktiondynamisch lädst, so brauchst die auch nicht mehr die LIB Datei dem Projekt hinzufügen, wenn du das meinst.

          Philip

          Comment


          • #6
            Hi

            Ich noch eine Frage bezüglich Einbinden des Formulares. Das scheint bei mir nicht so richtig zu funktionieren. Wo genau in der DLL muss ich das Formular mit USEFORM (z.B.: USEFORM("SmsDll\Gui\MainSmsDialog.cpp", Form1); ) einbinden?

            Dies ist mir nicht ganz klar und ich erhalte Access Violations wenn das Formular aufgerufen wird.

            Gruss und danke im voraus

            Dani

            Comment


            • #7
              hi Roma!

              ja! die dll wird schon ganz schön groß, wenn man ein formular samst code da reinpackt. es ist im grunde ja nicht viel anders als bei deinem hauptprogramm.
              wenn du allerdings mehrere formulare in deinem prog verwenden willst, ist es vllt. ratsamer diese doch eher auf mehrere dll's aufzuteilen, als eine 15mb große exe weiterzugeben.



              hi Dani!

              du mußt die *.cpp-datei über: Projekt / Dem Projekt hinzufügen... zu deinem dll-projekt hinzufügen.
              die zeile:"USEFORM("SmsDll\Gui\MainSmsDialog.cpp", Form1); " wird dann autom. im code aufgenommen.

              bye...

              Comment

              Working...
              X