AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form an DLL weitergeben

Ein Thema von SebE · begonnen am 27. Aug 2005 · letzter Beitrag vom 28. Aug 2005
Antwort Antwort
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#1

Form an DLL weitergeben

  Alt 27. Aug 2005, 17:28
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:
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?
Sebastian
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Form an DLL weitergeben

  Alt 27. Aug 2005, 19:05
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ß!
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#3

Re: Form an DLL weitergeben

  Alt 27. Aug 2005, 19:22
jupp, dass funktioniert.

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
Sebastian
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: Form an DLL weitergeben

  Alt 27. Aug 2005, 21:26
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
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Form an DLL weitergeben

  Alt 28. Aug 2005, 09:55
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.
Christian
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Form an DLL weitergeben

  Alt 28. Aug 2005, 10:00
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.
Christian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
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