Announcement

Collapse
No announcement yet.

Exit-Prozedur wird nicht ausgeführt

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

  • Exit-Prozedur wird nicht ausgeführt

    Ich habe in einer Delphi-DLL eine Funktion definiert, in der ein neues Formular erzeugt wird:

    ...
    Form1 := TForm1.Create(nil);
    ...

    Das funktioniert prima. Nun ist die Variable 'Form1' als globale Variable innerhalb der DLL definiert, da ich bei Aufruf weiterer Funktionen das entsprechende Formular manipulieren will.

    Am Ende soll (muss) das Formular mittels Methode "Free" wieder freigegeben werden. Dabei dachte ich eigentlich an die Exit-Prozedur.

    Gemäß Online-Hilfe habe ich also eine derartige Prozedur definiert und auch zugewiesen. Doch leider wird diese niemals aufgerufen, was letztlich beim Entfernen der DLL in der aufrufenden Anwendung zu einer Schutzverletzung führt.

    Kann mir vielleicht jemand sagen, wie ich eine Exit-Prozedur definiere, die in jedem Fall aufgerufen wird.

    Vielen Dank!

  • #2
    Hi

    Ich weis nicht welche Form der "Exit"-procedure Du nutzt ?! es gibt mehrere, hier eine davon:

    <pre>

    unit XYZ;<br>

    interface<br>

    type
    TMyForm = class(TForm)
    end;<br>

    var
    MyForm: TMyForm = nil;<br>

    implementation<br>

    uses....<br>

    .... blablabla Source für TMyForm<br>
    .... ganz am ender der Unit dann:<br>

    inintialization
    finalization
    if MyForm <> nil then
    begin
    MyForm.Free;
    MyForm := nil;
    end;
    end.

    </pre>

    Du solltest im OnDestroy Event noch folgenden Code hinzufügen:

    <pre>

    procedure TMyForm.FormDestroy();
    begin
    if MyForm = Self then MyForm := nil;
    end;

    </pre>

    Gruß Hage

    Comment


    • #3
      Hallo Hagen

      Ich habe bisher denselben Eindruck gehabt, daß meine Exit-Procedure meiner DLL nicht aufgerufen wird, da mein eingebautes ShowMessage nicht erschien.

      Mit Deiner Methode klappt es, wenn ich die initialization und finalization in meine "Haupt"-Unit einbaue.

      Doch ich würde eigentlich gerne meine bisher angestrebte Methode verwenden:

      in der begin-end-Klausel der Projektdatei der DLL führe ich die Anweisung AddExitProc(ExitProc) aus. Lt. Hilfe soll so eine Exitprocedure eingefügt werden.
      Die Procedure selbst steht ebenfalls in der Projekt DLL.

      Auch die Möglichkeit, den Zeiger ExitProc "umzubiegen" und beim beenden wieder zurückzusetzen schlägt fehlt.

      Wo liegt mein Problem?

      Danke

      Gruß Ja

      Comment


      • #4
        Hi

        hier der Ausschnitt aus der Delphi Hilfe

        <b>Beschreibung</b>

        In aktuellen Versionen von Delphi sollte AddExitProc nicht verwendet werden. Sie erreichen die gewünschte Funktionalität im finalization-Abschnitt einer Unit. AddExitProc ist zu Packages nicht kompatibel.

        <b>Hinweis</b>

        In früheren Versionen hatte die Prozedur AddExitProc folgenden Zweck: AddExitProc fügt die angegebene Prozedur zur Exit-Prozedurliste der Laufzeitbibliothek hinzu. Wird eine Anwendung beendet, werden deren Exit-Prozeduren in umgekehrter Reihenfolge ihrer Definition ausgeführt. Das bedeutet, die zuletzt an AddExitProc übergebene Prozedur wird zuerst aufgerufen.

        Gruß Hage

        Comment

        Working...
        X