Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Event Handler in DLL (https://www.delphipraxis.net/146450-event-handler-dll.html)

iphi 20. Jan 2010 09:01


Event Handler in DLL
 
Hallo,

wie kann ich innerhalb einer DLL einen Eventhandler realisieren?

Bsp:
Ich erzeuge in meiner DLL ein Timerobjekt mit Vorfahre nil.
In meiner DLL habe ich eine Procedur TimerEventHandler definiert.
Die Zuweisung Timer.Ontimer:=TimerEventHandler wird vom Compiler aber als Fehler gemeldet.
Wie mache ich das richtig?

Hier der Code, der nicht geht:
Code:
library Project2;

uses
  SysUtils,
  Classes,
  ExtCtrls;

{$R *.res}
var
  Timer: TTimer;

procedure TimerEventHandler(Sender: TObject);
begin
//mach was
Timer.Enabled:=false;
FreeAndNil(Timer);
end;

begin
  Timer:=TTimer.Create(nil);
  Timer.Interval:=1000;
  Timer.OnTimer:=TimerEventHandler; //hier Fehlermeldung [Error] Project2.dpr(22): Incompatible types: 'method pointer and regular procedure'
  Timer.Enabled:=true;
end.

Luckie 20. Jan 2010 09:45

Re: Event Handler in DLL
 
Hatten wir doch gerade erst. Die Ereignisprozedur muss die Methode einer Klasse sein. Das sagt doch auch schon ganz deutlich die Fehlermeldung.

iphi 20. Jan 2010 10:22

Re: Event Handler in DLL
 
Super, danke! Das wars.
Für die Nachwelt: So gehts:

Delphi-Quellcode:
library Project2;

uses
  SysUtils,
  Classes,
  Forms,
  ExtCtrls;

{$R *.res}

type
  THandler=Class
  procedure TimerEventHandler(Sender: TObject);
  end;

var
  Timer: TTimer;
  TestVar: integer;
  Handler: THandler;

procedure THandler.TimerEventHandler(Sender: TObject);
begin
//mach was
Timer.Enabled:=false;
FreeAndNil(Timer);
TestVar:=1;
end;

function Test: integer; cdecl; export;
begin
result:=testvar;
end;

exports Test;

begin
  TestVar:=0;
  Handler:=THandler.Create;
  Timer:=TTimer.Create(nil);
  Timer.Interval:=1000;
  Timer.OnTimer:=Handler.TimerEventHandler;
  Timer.Enabled:=true;
end.


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