Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL richtig beenden (https://www.delphipraxis.net/89741-dll-richtig-beenden.html)

Tommy82 5. Apr 2007 07:23


DLL richtig beenden
 
Hallo,

zuerst mein Quelltext:

Delphi-Quellcode:
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;
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".
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

RavenIV 5. Apr 2007 07:40

Re: DLL richtig beenden
 
Versuch mal anstatt Form_Anlegen.Release; ein Form_Anlegen.Free;

ste_ett 5. Apr 2007 07:41

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).

Tommy82 5. Apr 2007 07:59

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

Tommy82 10. Apr 2007 11:01

Re: DLL richtig beenden
 
Keiner eine Lösung ?

mfg

Tommy82

ste_ett 10. Apr 2007 11:09

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?

Robert Marquardt 10. Apr 2007 11:16

Re: DLL richtig beenden
 
Wieso ist die Form ueberhaupt in einer DLL? Benutzt du ShareMem?

toms 10. Apr 2007 11:16

Re: DLL richtig beenden
 
Inwiefern hat dein Code mit "DLL richtig beenden" etwas zu tun?

Tommy82 10. Apr 2007 16:21

Re: DLL richtig beenden
 
Ich habe ein leeres Formular mal spaßeshalber benutzt, selbes Phänomen.

DLL (Aufruf des Formulars)
Delphi-Quellcode:
Procedure TestDll_Start;
var Form1 : TForm1;
BEGIN
 Form1 := TForm1.Create(NIL);
 Form1.ShowModal;
END;

exports
 TestDll_Start;

begin
end.
DLL (Beenden des Formulars)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Form1.Free;
end;
nach dem ich auf den Beenden Button geklickt habe, bekomm eich einen Adress-Fehler.

Schon probiert :
Delphi-Quellcode:
Procedure TestDll_Start;
var Form1 : TForm1;
BEGIN
 Form1 := TForm1.Create(NIL);
 Try
  Form1.ShowModal;
 Finally
  Form1.Release;
 END;
END;

exports
 TestDll_Start;

begin
end.
.. aber das geht auch nicht.

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

brechi 10. Apr 2007 16:29

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz