Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktion die über einen Pointer von Dll aufgerufen wird (https://www.delphipraxis.net/23314-funktion-die-ueber-einen-pointer-von-dll-aufgerufen-wird.html)

c113plpbr 1. Jun 2004 12:37


Funktion die über einen Pointer von Dll aufgerufen wird
 
Ich möchte von (m)einer Anwendung aus eine Funktion aus (m)einer DLL aufrufen.
Nun möchte ich wie in EnumWindows einen Pointer, auf eine Funktion der Anwendung zeigend, übergeben, welche die DLL dann aufrufen kann, wann es ihr beliebt.
Also wie in EnumWindows. Wie stelle ich das am besten an?

(sorry für die blöde überschrift, aber was soll man da denn schreiben ...)

Danke für jede Antwort,
ciao, Philipp

Christian Seehase 1. Jun 2004 16:49

Re: Funktion die über einen Pointer von Dll aufgerufen wird
 
Moin Philipp,

der Begriff, der Dir fehlte ist Callback Funktion.

Das Prinzip ist ganz einfach.
Du deklarierst Dir einen Typ, der die Funktion/Prozedur Deklaration enthält, z.B.

Delphi-Quellcode:
type
  TMyCallback = procedure(const AiValue : integer);
Jetzt kannst Du den Typ in der DLL verwenden

Delphi-Quellcode:
// DLL
procedure EnumRandom(const AiCount : integer;const ACallback : TMyCallback);

var
  i : integer;

begin
  randomize;
  for i := 1 to AiCount do begin
    ACallback(Random(50));
  end;
end;
Delphi-Quellcode:
// Anwendung
// Annahme: Die DLL Funktion wurde unter ihrem Namen importiert

// Die Funktion die Aufgerufen werden soll.
procedure EnumCallback(const AiValue : integer);
begin
  Form1.Memo1.Add(IntToStr(AiValue));
end;

// Es werden 10 Zufallszahlen von 0 bis 49 in ein Memo geschrieben
procedure TForm1.Button1Click(sender: TObject);
begin
  EnumRandom(10,@EnumCallback);
end;
Ungetestest sollte aber so gehen.

c113plpbr 1. Jun 2004 19:12

Re: Funktion die über einen Pointer von Dll aufgerufen wird
 
Danke, das war das was ich suchte.

ciao, Philipp


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