![]() |
Delphi-Version: 7
mehrere Formular-DLL laden/entladen
Hallo,
ich habe ein kleines Demo-Projekt mit Luckies Code ![]() In dem Formular sind 2 Buttons, die jeweils eine Formular-DLL laden. Also folgende Reihenfolge: -Button1 drücken, lädt Form1 -Button2 drücken, lädt Form2 -Form1 beenden, beendet nicht, wie zu erwarten, Form1 sondern Form2 Es wird, egal welche DLL zuerst aufgerufen wird, immer in umgekehrter Reihenfolge des Ladevorgangs enladen.
Delphi-Quellcode:
Weiß jemand Rat?
{-----------------------------------------------------------------------------
Project: Formular in DLL Description: Aufruf eines Formulares aus einer DLL Author: Michael Puff, http://michael-puff.de Date: 2011-12-22 -----------------------------------------------------------------------------} ... procedure TForm1.btn1Click(Sender: TObject); type TShowForm = procedure; stdcall; var DLLForm1: THandle; ShowForm: TShowForm; begin DLLForm1 := LoadLibrary('c:\Test\Form1.dll'); if DLLForm1 <> 0 then begin @ShowForm := GetProcAddress(DLLForm1, 'Form1Anzeigen'); if Assigned(ShowForm) then begin ShowForm; FreeLibrary(DLLForm1); end else ShowMessage(SysErrorMessage(GetLastError)); end else ShowMessage(SysErrorMessage(GetLastError)); end; procedure TForm1.btn2Click(Sender: TObject); type TShowForm = procedure; stdcall; var DLLForm2: THandle; ShowForm: TShowForm; begin DLLForm2 := LoadLibrary('c:\Test\Form2.dll'); if DLLForm2 <> 0 then begin @ShowForm := GetProcAddress(DLLForm2, 'Form2Anzeigen'); if Assigned(ShowForm) then begin ShowForm; FreeLibrary(DLLForm2); end else ShowMessage(SysErrorMessage(GetLastError)); end else ShowMessage(SysErrorMessage(GetLastError)); end; |
AW: mehrere Formular-DLL laden/entladen
Spontan wäre es mir jetzt sehr unheimlich die Dll gleich wieder nach dem Ausführen einer Funktion (mit ihrer von der Hauptanwendung unabhängigen VCL) gleich wieder rauszuwerfen. Warum machst du direkt wieder ein
Delphi-Quellcode:
?
FreeLibrary
Was ist, wenn man das auf "später" vertagt, ändert das etwas? Ich sitze zufälligerweise an einem sehr ähnlichen Projekt (mehrere verschiedene dlls die auch (nach Anfrage) mehrere Formen erzeugen und anzeigen), allerdings nehme ich die auch erst wieder aus dem Speicher, wenn wirklich alles zu Ende ist. Und da wird auch alles geschlossen wie es sollte... |
AW: mehrere Formular-DLL laden/entladen
Zitat:
FreeLibrary wird erst ausgeführt, wenn das Formular geschlossen wird. Aber hier sieht man schön im Debugger, das in der falschen Procedure weiter gemacht wird. |
AW: mehrere Formular-DLL laden/entladen
ShowForm sind zwar zwei lokale Variablen, vielleicht löst der Compiler da irgendetwas falsch auf, probier mal die beiden mit ShowForm1 und ShowForm2 zu bezeichnen.
|
AW: mehrere Formular-DLL laden/entladen
Mir ist es immer noch zu gruselig, direkt dahinter ein
Delphi-Quellcode:
. Was gibt der Aufruf denn zurück?
FreeLibrary
|
AW: mehrere Formular-DLL laden/entladen
Zitat:
Zitat:
Zitat:
|
AW: mehrere Formular-DLL laden/entladen
Hast Du die Formular mal einzeln ausprobiert? Und wie sieht die FormAnzeigen-Methode in der DLL genau aus?
|
AW: mehrere Formular-DLL laden/entladen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal ein Testprojekt angehängt.
|
AW: mehrere Formular-DLL laden/entladen
Ich habe (bislang) nicht verstanden, wozu das
Delphi-Quellcode:
-Objekt eigentlich gut ist. Deshalb habe ich es in deinem Testprojekt einmal so abgeändert, wie ich es bei mir tue:
Application
Und es geht - Die Fenster werden so geschlossen, wie man auch draufklickt. PS: Zitat:
Delphi-Quellcode:
FreeLibrary
|
AW: mehrere Formular-DLL laden/entladen
Zitat:
Delphi-Quellcode:
reicht ja nicht.
TForm.Create()
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz