Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehlermeldung: Reguläre Prozedur und Methodenzeiger? (https://www.delphipraxis.net/90064-fehlermeldung-regulaere-prozedur-und-methodenzeiger.html)

Puhbaehr 11. Apr 2007 06:18


Fehlermeldung: Reguläre Prozedur und Methodenzeiger?
 
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
Delphi-Quellcode:
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.

:?

marabu 11. Apr 2007 06:46

Re: Fehlermeldung: Reguläre Prozedur und Methodenzeiger?
 
Guten Morgen,

du hast den Typ TOnTest falsch vereinbart:
Delphi-Quellcode:
type
  TOnTest = procedure of object;
Grüße vom marabu

Puhbaehr 11. Apr 2007 06:52

Re: Fehlermeldung: Reguläre Prozedur und Methodenzeiger?
 
Jupp, bin eben mal auf die Idee gekommen nach meinem eigenen Titel zu suchen und bin grade eben durch die Ergebnisse auch darauf gekommen.
Muh... aber dennoch bekomm ich eine Zugriffsverletzung.
Aber vermutlich sind die anderer Natur...

Danke soweit :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz