Mahlzeit ich bin neu hier und auch neu bei Delphi
Ich habe folgendes vor und zwar will ich ein Callback für meinen HotSpot einrichten
Bzw ich habe eine Event Procedure in einer
DLL dieses Event soll reagieren wenn ich meinen hotSPot auf meinem Gerät drücke!
Quasi also wie ein button allerdings krieg ich es nicht hin das Event auf den button zu Legen!
Dies soll wohlbemerkt alles in einer klasse Verwirklicht werden
Irgendwelche Tipps ?
MfG Johnny
Was exportierst Du denn aus der
DLL? Kode bitte, zumindest die Deklaration der exportierten Funktion.
Ein Event handler in Delphi muss eine Methode eines Objektes sein, oft ein TNotifyevent, also vom Typ
procedure (sender: TObject) of Object;
Das "of Object" impliziert, das es sich um eine Methode eines Objektes handeln muss. Das Äquivalent einer standalone procedure mit der gleichen Signatur wäre
procedure (self: TObject; sender: TObject); // register calling convention!
self ist dabei die Addresse des Objektes, zu dem die Methode gehört, oder der Klasse selbst, bei einer class procedure.
Eine Methode kann man nicht direkt aus einer
DLL exportieren, eine Prozedur mit der äquivalenten Signatur aber schon. Um die als Event handler verwenden zu können bedarf es aber eines Tricks. Es gibt einen Typ in Delphi, der eine Methode repräsentiert:
TMethod.
Damit kann man einen Tnotifyevent quasi on the fly erzeugen:
Delphi-Quellcode:
var
M: TMethod;
begin
M.data :=
nil;
M.code := GetProcaddress(dllhandle, NameDerExportiertenProzedur);
hotspotbutton.OnClick := TNotifyEvent(M);
Der hier verwendete Wert für M.Data wird als Self-Parameter an die Prozedur übergeben. Die Prozedur
in der
DLL kann den Aufruf dann an eine Methode eines internen Objektes weiterleiten.