Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#4

AW: Event aus DLL für HotSpot Nutzen

  Alt 24. Jun 2019, 12:53
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.
Peter Below
  Mit Zitat antworten Zitat