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 automatisch nach Procedureaufruf beenden (https://www.delphipraxis.net/93463-dll-automatisch-nach-procedureaufruf-beenden.html)

Tommy82 6. Jun 2007 10:31


DLL automatisch nach Procedureaufruf beenden
 
Hallo,

Ich habe eine DLL-Datei, welche ich zur Laufzeit einbinde.
In der DLL habe ich ein Formular, welches ich folgendermaßen aufrufe:

Delphi-Quellcode:
var Uebergabe : TUebergabe;
BEGIN
 Uebergabe := TUebergabe.Create(NIL);
 Uebergabe.ShowModal;
 Uebergabe.Free;
END;
Wenn die Form aktiviert wird, startet eine Procedure, führt die Anweisungen aus und dann soll diese DLL wieder schließen. Normalerweise schließe ich die DLL mit
Delphi-Quellcode:
self.Close
. Aber Irgendwie geht das nicht. Es tut sich nix. Wenn ich mit
Delphi-Quellcode:
self.release
beende, kann ich nicht mehr auf das Hauptfenster zugreifen (bzw. nix anklicken).

Was mache ich falsch ?

mfg

Tommy82

DeddyH 6. Jun 2007 10:36

Re: DLL automatisch nach Procedureaufruf beenden
 
Zitat:

Zitat von Tommy82
In der DLL habe ich ein Formular, welches ich folgendermaßen aufrufe:

Wo rufst Du das Formular denn auf? Aus der Hauptanwendung oder aus einer Funktion innerhalb der DLL?

Tommy82 6. Jun 2007 10:48

Re: DLL automatisch nach Procedureaufruf beenden
 
Hallo,

Formular wird aus der DLL aufgerufen
Delphi-Quellcode:
Procedure Uebergabe;
var Uebergabe : TUebergabe;
BEGIN
 Uebergabe := TUebergabe.Create(NIL);
 Uebergabe.ShowModal;
 Uebergabe.Free;
END;
Procedure des Hauptprogramms :
Delphi-Quellcode:
Procedure TForm1.zeige_DLL(Dateiname, Name:String);
var
 DLL:TDLL;
 Handle : THandle;
BEGIN
 Handle := LoadLibrary(PCHAR(ExtractFilePath(ParamStr(0)) + '\PlugIns\' + Dateiname));
 IF Handle <> 0 THEN
 BEGIN
  @DLL := GetProcAddress(Handle, PCHAR(Name));
  IF @DLL <> NIL THEN DLL ELSE Showmessage('Fehler beim Laden der Datei "'+Dateiname+'"');
 END;
 FreeLibrary(Handle);
EN
Aufruf der Procedure
Delphi-Quellcode:
procedure TForm1.bergabe1Click(Sender: TObject);
begin
 Zeige_DLL('Preissuchmaschine.dll','Uebergabe');
end;
Der Aufruf selber funktioniert einwandfrei, aber das beenden geht leider nur manuell. Will es aber automatisch nach beenden der Procedure haben.

mfg

Tommy82

DeddyH 6. Jun 2007 10:53

Re: DLL automatisch nach Procedureaufruf beenden
 
Wann innerhalb der DLL wird die Procedure denn aufgerufen? OnCreate z.B. funktioniert Close nicht.

Tommy82 6. Jun 2007 10:59

Re: DLL automatisch nach Procedureaufruf beenden
 
Delphi-Quellcode:
procedure TUebergabe.FormActivate(Sender: TObject);
begin
 Start;
end;

Procedure TUebergabe.Start;
BEGIN
...
 self.close // self.release geht auch nicht
END;

DeddyH 6. Jun 2007 11:01

Re: DLL automatisch nach Procedureaufruf beenden
 
Komisch, sollte eigentlich gehen. Aber mir ist was anderes aufgefallen.
Delphi-Quellcode:
Procedure Uebergabe;
var Uebergabe : TUebergabe;
BEGIN
Uebergabe := TUebergabe.Create(NIL);
Uebergabe.ShowModal;
Uebergabe.Free;
END;
Procedure und Variable heißen beide Uebergabe? Und das frisst der Compiler?

Tommy82 6. Jun 2007 11:02

Re: DLL automatisch nach Procedureaufruf beenden
 
Ja, das frisst der. Habe das aber auch mal geändert und geht trotzdem nicht.

mfg

Tommy82

Luckie 6. Jun 2007 12:50

Re: DLL automatisch nach Procedureaufruf beenden
 
Zitat:

Zitat von Tommy82
Normalerweise schließe ich die DLL mit
Delphi-Quellcode:
self.Close
.

Dir ist bewusst, dass du totalen Quatsch schreibst? Eine DLL ist eine kompilierte Datei die anderen Prozessen Funktionen zur Verfügung stellt. Eine DLL läd man und man entläd sie wieder. Man schließt sie aber nicht.
Und das:
Delphi-Quellcode:
self.Close
ist der Aufruf einer Methode einer Klasse. Ein real existierendes Objekt in Form einer Datei, kennt keine Methoden im Gegensatz zu einem abstrakten Gebilder, wie es eine Klasse ist. Eine Datei kann keine Methode Close haben.
Kleiner Tipp: Vor dem Posten erstmal die Gedanken sortieren und überlegen, was man eigentlich will und wo das Problem eigentlich ist. Meist erübrigt sich dann schon ein Posting.

Was Forms in DLLs angeht, kannst du dir mal das Tutorial von Olli angucken: http://www.michael-puff.de/dirindex....orte/Assarbad/

Tommy82 6. Jun 2007 13:19

Re: DLL automatisch nach Procedureaufruf beenden
 
Hallo,

dann habe ich mich falsch ausgedrückt. Ich möchte das Formular schießen. Die DLL schließt sich von selber, das weiß ich.
Das Formular schließe ich aber mit "Self.Close".
Das funktioniert auch wenn ich das manuell (über einen Button) mache. Aber wenn ich es mit in die OnActivate mache, klappts net.

mfg

Tommy82

Luckie 6. Jun 2007 13:22

Re: DLL automatisch nach Procedureaufruf beenden
 
Die DLL schließt sich aber nur von selbst, wenn du sie nicht zur Laufzeit dynamisch lädst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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