Announcement

Collapse
No announcement yet.

Das Formular in der DLL lässt sich nicht beenden!

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

  • Das Formular in der DLL lässt sich nicht beenden!

    Hallo,

    ich habe folgende Situation:

    Aus einer Exe (EXE) wird eine DLL (Test1.DLL) aufgerufen. Diese Test1.DLL ruft eine andere DLL (Test2.DLL) auf.
    Beide DLLs haben Formulare. Beide haben gleiche Aufrufparameter und Rückgabewert.

    function Searchshow(aufrufChar;firmaChar;userChar;pgmChar;spracheChar)char;export;<br>
    begin<br>
    Form1 := TForm1.Create(nil);<br>
    try<br>
    form1.aufruf.Text := aufruf;<br>
    form1.firma.Text := firma;<br>
    form1.user.Text := user;<br>
    form1.pgm.Text := pgm;<br>
    form1.sprache.Text := sprache;<br>
    Form1.ShowModal;<br>
    finally<br>
    result := PAnsiChar(form1.Edit1.Text);<br> form1.Free;<br>
    end;<br>
    end;<br>
    Exports<br>
    Searchshow;<br>
    begin<br>
    end.<br>

    Die Funktion der beiden DLLs ist genau gleich! Nur der Funktionsname und DLLName sind unterschiedlich.

    Das Problem:
    Sobald die Test2. DLL von der Test1.DLL aufgerufen und wieder verlassen wird, kann die Test1.DLL nicht mehr beendet werden. Sonst stehen mir alle Funktionen (z.B. Buttons) zur Verfügung. Nur der Button "Beenden" mit dem "form1.Close;" funktioniert nicht - reagiert einfach nicht!! Ich kann die DLL auch nicht aus dem TaskManager entfernen. Erst wenn ich die EXE aus dem TaskManager entferne, wird auch die Test1.DLL beendet.<br>
    Wenn die Test2.DLL nicht aufgerufen wird (optional), dann kann ich die Test1.DLL ganz normal beenden!

    Der Aufruf der Test2.DLL sieht wie folgt aus: <br>
    var dll_rueckgabewert : pchar;<br>
    IF FileExists('C:\....\PGM\Test2.dll') then begin<br>
    SearchDLLInstalliert := true;<br>
    SearchHandle := LoadLibrary(PChar('C:\....\PGM\Test2.dll'));<br>
    SearchBericht := GetProcAddress(SearchHandle,PChar('Searchshow'));< br>
    IF SearchBericht = nil then begin<br>
    SearchDLLInstalliert := false;<br>
    showmessage('Test2.dll nicht richtig installiert!!');<br>
    end else @SearchShow := SearchBericht;<br>
    end else begin<br>
    SearchDLLInstalliert := false;<br>
    showmessage('Test2.dll - Funktionen stehen nicht zur Verfügung!!!');<br>
    end;<br>

    if SearchDLLInstalliert then dll_rueckgabewert := Searchshow(PAnsiChar(_aufruf),PAnsiChar(firma.text ),PAnsiChar(user.text),PAnsiChar(pgm),PAnsiChar(sp rache.text));<br>


    FreeLibrary(SearchHandle);<br>

    Kleinigkeit:
    Rufe ich aus der Test1.DLL eine Test3.DLL, die nicht als function sonder als procedure (kein Rückgabeparameter) definiert ist, kann ich die Test1.DLL ganz normal verlassen.


    Ich hoffe, es hat jemand eine Idee, warum sich die Test1.DLL nicht normal beenden lässt.

    Vielen, vielen Dank

    Sladjana
Working...
X