Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form an DLL weitergeben (https://www.delphipraxis.net/52315-form-dll-weitergeben.html)

SebE 27. Aug 2005 16:28


Form an DLL weitergeben
 
hi,
wie kann ich meine Form an eine DLL als Parameter übergeben?

Form-Code:
Delphi-Quellcode:
function Form1.Send(const MeineFunktion: String; Sender: TObject): Boolean;
  try
  @CMDFunc := GetProcAddress('MeineDLL.dll', PChar(MeineFunktion));

  Result := CMDFunc(ParamStr, Sender); //Sender ist meine Form //ParamStr hat noch keine Verwendung

  except
  Result := False;
  end;
end;
Ich rufe sie so auf:
Delphi-Quellcode:
Send('Funktion1', Form1) //Funktion1 soll die Form schließen
DLL-Code:
Delphi-Quellcode:
function Funktion1(const ParamStr: String; Sender: TObject): Boolean;
begin
Result := False;
  try
  (Sender as TObject).Destroy;
  Result := True;
  except
  Result := False;
  end;
end;
Was muss ich ändern, damit der Quellcode funktioniert?
Im Moment macht er gar nichts, obwohl die Funktion ausgeführt wird.

Da haut doch was mit den Parametern nicht richtig hin.

Könnt ihr mir helfen?

Olli 27. Aug 2005 18:05

Re: Form an DLL weitergeben
 
Statt DLL solltest du BPLs nehmen und wenn schon DLL dann als Typ bei den Parametern auch den echten Typ (zB TForm1)! Will heißen, daß die DLL auch Zugriff auf die Klassendeklaration von TForm1 haben muß!

SebE 27. Aug 2005 18:22

Re: Form an DLL weitergeben
 
jupp, dass funktioniert.

Delphi-Quellcode:
function Form1.Send(const MeineFunktion: String; Sender: TForm): Boolean;
Problem: Man muss die Unit Forms einbinden... und naja 302 KB sprechen für sich :?

Danke

Olli 27. Aug 2005 20:26

Re: Form an DLL weitergeben
 
Zitat:

Zitat von SebE
Problem: Man muss die Unit Forms einbinden... und naja 302 KB sprechen für sich :?

Wirst du kaum vermeiden können. Ohne die entsprechende Unit gibt's keine VTable, ohne VTable ist der Pointer nur ein Pointer. Eine Alternative könntest du eventuell über Interfaces erreichen - damit kenne ich mich allerdings nicht so gut aus :|

tigerman33 28. Aug 2005 08:55

Re: Form an DLL weitergeben
 
Wie äußert sich denn "macht gar nichts"? Die Form wird nicht geschlossen? Oder die Istanzenreferenz ist <> nil? Result = false? Oder wie?

BTW: Instanzen solltest du besser über Instanz.Free statt direkt über Destroy freigeben. Bei Forms sogar noch besser über Release, weil das die Eventqueue erst zu Ende bearbeiten lässt.

@Olli:
Ich denke bei dem Weg über Interfaces gewinnt man nichts, denn über kurz oder lang muss das Interface auch auf den Typen zugreifen können, die Unit muss also so oder so eingebunden werden.

tigerman33 28. Aug 2005 09:00

Re: Form an DLL weitergeben
 
Hmm mir ist gerade noch was aufgefallen.
Zitat:

Delphi-Quellcode:
function Funktion1(const ParamStr: String; Sender: TObject): Boolean;
begin
Result := False;
  try
  (Sender as TObject).Destroy;
  Result := True;
  except
  Result := False;
  end;
end;

Der Parameter Sender ist sowieso schon TObject, der Typecast ist also überflüssig. Aber kann es sein, dass durch den expliziten Typecast eben nicht mehr der überschriebene Destruktor, sondern der von TObject aufgerufen wird? Ich weiß, ist virtual, aber das würde erklären warum es funktioniert, nachdem du den Type von Sender geändert hattest.


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