![]() |
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:
Bekomme aber die Fehlermeldung Inkompatible Typen: Reguläre Prozedur und Methodenzeiger - weshalb und wie mach ich es richtig? Unter was kann ich suchen?
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. Ersetze ich obige Zeile durch
Delphi-Quellcode:
dann wird in diesem Beispiel der Code fehlerfrei ausgeführt.
POnTest := @TTest.ThisTest;
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:
Ziel ist es aber die Prozedur aus der Klasse zu verwenden.
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. :? |
Re: Fehlermeldung: Reguläre Prozedur und Methodenzeiger?
Guten Morgen,
du hast den Typ TOnTest falsch vereinbart:
Delphi-Quellcode:
Grüße vom marabu
type
TOnTest = procedure of object; |
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 01:17 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