Guten Morgen,
folgendes Beispiel soll mein Problem erklären/zeigen.
Ich möchte einer Variablen eine Prozedur aus einer Klasse zuweisen:
Delphi-Quellcode:
program Project1;
uses
SysUtils,
Windows;
type
TOnTest = procedure;
type
TTest = class
public
procedure ThisTest;
end;
procedure TTest.ThisTest;
begin
Windows.MessageBox (0, 'Test', 'Test', MB_OK);
end;
var
Test : TTest;
POnTest : TOnTest;
begin
Test := TTest.Create;
POnTest := Test.ThisTest; // <--
// irgendwann später...
if (Assigned (POnTest)) then
begin
POnTest;
end;
Test.Destroy;
end.
Bekomme aber die Fehlermeldung
Inkompatible Typen: Reguläre Prozedur und Methodenzeiger - weshalb und wie mach ich es richtig? Unter was kann ich suchen?
Ersetze ich obige Zeile durch
POnTest := @TTest.ThisTest;
dann wird in diesem Beispiel der Code fehlerfrei ausgeführt.
Aber in meinem Projekt in welchem ich diesen Fall anwenden möchte, wird zwar die Prozedur erfolgreich ausgeführt, aber beim Rücksprung bekomme ich eine Zugriffsverletzung.
Lege ich stattdessen die Prozedur die ich Zuweisen möchte Lokal in die
Unit bekomme ich keine Zugriffsverletzung:
Delphi-Quellcode:
program Project1;
uses
SysUtils,
Windows;
type
TOnTest = procedure;
procedure ThisTest;
begin
Windows.MessageBox (0, 'Test', 'Test', MB_OK);
end;
var
POnTest : TOnTest;
begin
POnTest := ThisTest;
// irgendwann später...
if (Assigned (POnTest)) then
begin
POnTest;
end;
end.
Ziel ist es aber die Prozedur aus der Klasse zu verwenden.