![]() |
DLL richtig beenden
Hallo,
zuerst mein Quelltext:
Delphi-Quellcode:
Das klappt auch soweit ganz Prima, die Form wird aufgerufen, aber sobald ich die Form beenden will bekomme ich immer einen Fehler an Adresse "xy".
Procedure Artikel_Neu;
var Form_anlegen : TForm_Anlegen; BEGIN Form_Anlegen := TForm_Anlegen.Create(NIL); Try Form_Anlegen.Showmodal; Finally Form_Anlegen.Release; End; END; Ich habe es versucht mit "Form_Anlegen.Release" oder auch einfach nur mit Exit, mit "Form_Close" gehts auch net und mit Hide bleibt es ja immernoch da. Wie beende ich nun das DLL Formular richtig ? mfg Tommy82 |
Re: DLL richtig beenden
Versuch mal anstatt Form_Anlegen.Release; ein Form_Anlegen.Free;
|
Re: DLL richtig beenden
Klassen werden mit "VarName.Free" freigegeben. :)
Prüfe, ob du im Programm und in der DLL die gleichen Aufrufkonventionen gesetzt hast (z.B. stdcall). |
Re: DLL richtig beenden
Hallo,
danke für die schnellen Antworten. 1) Habe jetzt mal das release gegen das Free getauscht. Aufrufk. sind gleich (stdCall). Der Fehler kommt immernoch. Welchen befehl gebe ich dazu, dass er das Form schließt ? Bei Form_anlegen.free tut sich nix, rest wieder Fehler. mfg Tommy82 |
Re: DLL richtig beenden
Keiner eine Lösung ?
mfg Tommy82 |
Re: DLL richtig beenden
Erzeugst du irgendwelche Komponenten auf deinem Formular, die nicht wieder freigegeben werden?
Tritt der Fehelr auch auf, wenn du ein komplett neunes, leeres Formular anzeigst? Geh mal mit dem Debugger durch und prüfe, an welcher Stelle der Fehler genau auftritt. Beim "Free()"? Beim "end;?" Woanders? |
Re: DLL richtig beenden
Wieso ist die Form ueberhaupt in einer DLL? Benutzt du ShareMem?
|
Re: DLL richtig beenden
Inwiefern hat dein Code mit "DLL richtig beenden" etwas zu tun?
|
Re: DLL richtig beenden
Ich habe ein leeres Formular mal spaßeshalber benutzt, selbes Phänomen.
DLL (Aufruf des Formulars)
Delphi-Quellcode:
DLL (Beenden des Formulars)
Procedure TestDll_Start;
var Form1 : TForm1; BEGIN Form1 := TForm1.Create(NIL); Form1.ShowModal; END; exports TestDll_Start; begin end.
Delphi-Quellcode:
nach dem ich auf den Beenden Button geklickt habe, bekomm eich einen Adress-Fehler.
procedure TForm1.Button1Click(Sender: TObject);
begin Form1.Free; end; Schon probiert :
Delphi-Quellcode:
.. aber das geht auch nicht.
Procedure TestDll_Start;
var Form1 : TForm1; BEGIN Form1 := TForm1.Create(NIL); Try Form1.ShowModal; Finally Form1.Release; END; END; exports TestDll_Start; begin end. Ich möchte das Formular gerne in eine DLL auslagern, da ich dieses Formular : a) in mehreren Programmen verwenden möchte b) ein Update des Formulars schneller möglich ist (ohne das Programm neu zu schreiben) Nur sobald ich das Formular beende, bekomme ich immer : Zugriffsverletzung bei Adresse 0036D875 in Modul 'TestDll.dll'. Lesen von Adresse 00000000". Wie kann ich nun das Formular beenden ohne einen Fehler zu bekommen? mfg Tommy82 |
Re: DLL richtig beenden
Die Form kann sich doch nicht selbst freigeben. Und hast du mal ein leeres Formular benutzt mit dem Code den du vorher hattest. Also ShowModal + Form.free hintereinander?
|
Re: DLL richtig beenden
Showmodal + Free klappt nicht hintereinander
|
Re: DLL richtig beenden
Zitat:
Es ist ein lokales Objekt, was nach Beendigung der Funktion "ShowModal()" ohne Weiteres wieder freigegeben werden kann. :) |
Re: DLL richtig beenden
Delphi-Quellcode:
Formular bleibt offen, es tut sich nix
Procedure TestDll_Start;
var Form1 : TForm1; BEGIN Form1 := TForm1.Create(NIL); Form1.ShowModal; Form1.Free; END; mfg Tommy82 |
Re: DLL richtig beenden
Delphi-Quellcode:
da schließt sich das Fenster SOFORT wieder (flackert).
Procedure TestDll_Start;
var Form1 : TForm1; BEGIN Form1 := TForm1.Create(NIL); Form1.Show; Form1.Free; END; Aber wie baue ich es nun in die Form1 ein? |
Re: DLL richtig beenden
setz mal in den Optionen von exe und dll auf "build with runtime packages" und lass dort RTL und VCL drin stehen. das sollte dein Problem beheben, denn ohne arbeiten exe und DLL jeweils mit einer eigenen Kopie der VCL.
Ansonsten ist es kein problem, folgendes zu machen :
Delphi-Quellcode:
form1 := TForm1.Create(Application);
try form1.showmodal; finally form1.free; end; |
Re: DLL richtig beenden
Wenn ich auf das Formular einen Butten setze und den mit
Delphi-Quellcode:
setze, dann klappt das auch.
Self.Release oder Self.Free
mfg Tommy82 |
Re: DLL richtig beenden
Hi,
das ist ein Code den ich in einer meiner Kompos zum aufruf eines Einstellungsfensters benutze. Klappt anstandslos:
Delphi-Quellcode:
LoadItemsinPropertyForm und LoadItemsfromPropertyForm sind meine Methoden zum Laden und Lesen der Einstellungswerte. Also nicht dran stören.
procedure TBaseSeyControl.PropertyButtonClick(Sender: TObject);
var PropForm : TBaseSeyControlPropForm; begin PropForm := TBaseSeyControlPropForm.Create(self); try LoadItemsinPropertyForm(PropForm); PropForm.ShowModal; LoadItemsfromPropertyForm(PropForm); finally FreeAndNil(PropForm); end; end; Gruß oki |
Re: DLL richtig beenden
Auch interressant, werde ich mal bei der nächsten Gelegenheit testen.
mfg Tommy82 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 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