Announcement

Collapse
No announcement yet.

DLLs mit internen Forms

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

  • DLLs mit internen Forms

    Hallo Leute,

    ich arbeite mich gerade ein bißchen in die Erstellung / Verwendung von DLLs ein.

    Ich habe eine DLL erzeugt, in der sich eine TForm befindet. Hierbei habe ich folgedes festgestellt:<BR>
    Wenn ich aus einer Funktion der DLL heraus die TForm aufrufe, bekomme ich einen Fehler (Zugriffsverletzung bei Adresse 00000000).<BR>
    Das hat mich auf die Idee gebracht, die TForm vor dem Anzeigen zur Laufzeit zu erzeugen. Das hat dann auch funktioniert.<P>
    Ist das grundsätzlich so? Muß ich jedes Form, das Teil der DLL ist, zur Laufzeit erzeugen, oder habe ich da was übersehen?

    Grüße Jochen

  • #2
    Hallo Jochen!

    Bei einem 'normalen' Programm findest Du im Projekt.cpp
    <PRE>
    Application->CreateForm(...);
    </PRE>
    Diese Anweisung(en) werden automatisch von der IDE hinzugefügt, wenn Du eine Form in das Projekt aufnimmst. Ob diese Anweisung(en) dort erscheinen, bestimmst Du in den Projekt-Optionen => Formulare: Automatisch erzeugte / Verfügbare. Du kannst es aber im .cpp auch editieren - hat den gleichen Effekt.<br>
    In einer DLL legt die IDE diesen Code (verständlicherweise) NICHT an, Du musst es also tatsächlich selbst schreiben

    Comment


    • #3
      Hallo Knut,

      danke für die schnelle Antwort.

      Ich hab' das aber nicht mit CreateForm gemacht, sondern in der Funktion der DLL mit
      <PRE>
      TFormTestForm* TestForm = new TFormTestForm(NULL);
      TestForm->ShowModal();
      delete TestForm;
      </PRE>
      Muß, oder sollte ich das besser mit CreateForm machen? (ich hab' das ganze natürlich noch in try catch gesetzt).

      Joche

      Comment


      • #4
        Hallo Jochen,

        ist wohl 'Geschmackssache', wie man die Form erzeugt, das Ergebnis sollte das Gleiche sein. Wenn Du 'meine' Methode benutzt und im 'OnClose'
        <PRE>
        Action = caFree;
        </PRE>
        angibst, sparst Du Dir das Freigeben (und kannst es auch nicht vergesen).

        Gruß Knut

        P.S. Sorry, hatte die Unterschrift vorhin in der Eile vergessen..

        Comment


        • #5
          Hallo Knut,

          da ich es jetzt schon (in meiner esten 'echten' DLL) mit new gemacht habe und es keine Nachteile hat, lasse ich es so.

          Um ehrlich zu sein, habe ich auch kein OnClose() in meiner DLL. Ich habe die mit dem DLL-Experten gemacht. Da mußte ich sogar die Header-Datei manuell anlegen. Ich fürchte, ich werde um ein, zwei Tage intensiven Ausprobierens wohl nicht herumkommen...

          Danke nochmals,

          Joche

          Comment

          Working...
          X