Einzelnen Beitrag anzeigen

Puhbaehr
(Gast)

n/a Beiträge
 
#1

Fehlermeldung: Reguläre Prozedur und Methodenzeiger?

  Alt 11. Apr 2007, 06:18
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.

  Mit Zitat antworten Zitat