![]() |
[FreePascal] Ereignisse an Komponenten knüpfen
Hallo DP,
ich habe ein Problem mit Free Pascal: Und zwar wie kann ich Ereignisse an Komponenten knüpfen? Ich habe es in Delphimanier versucht, allerdings meint er dass nicht genügend Parameter genannt wurden?
Delphi-Quellcode:
MfG
FUDP.OnRecieve := FUDPRecieve;
xZise |
Re: [FreePascal] Ereignisse an Komponenten knüpfen
FUDPRecieve muss eine methode einer klasse sein und muss als pointer uebergeben werden
|
Re: [FreePascal] Ereignisse an Komponenten knüpfen
Im Zweifel könntest du es auch mal mit einem @ versuchen - Delphi erfordert das nur bei Funktionszeigern.
|
Re: [FreePascal] Ereignisse an Komponenten knüpfen
Zitat:
das finde ich an delphi etwas doof. auch bei zeigern die auf records zeigen muss nicht unbedingt dereferenziert werden, fpc ist da schon etwas genauer ;) |
Re: [FreePascal] Ereignisse an Komponenten knüpfen
Cool! Mit "@" meckert er nicht mehr herum! Danke!
MfG xZise |
Re: [FreePascal] Ereignisse an Komponenten knüpfen
Es gibt aber das Problem, dass man TKlasse.Methode sowohl als Funktions- als auch als Methodenzeiger interpretieren kann, bei letzterem eben mit Instanz (manchmal wird das dann auch als gebundener Methodenzeiger bezeichnet, im Gegensatz zu dem, was ich oben Funktionszeiger genannt habe, was aber eigentlich ein ungebundener Methodenzeiger ist), und es nicht ganz einfach ist, da eine vernünftig unterscheidbare Syntax zu finden. Bei Delphi hat man sich eben für ein @ beim ungebundenen und kein @ beim gebundenen entschieden.
Besonders haarig wird es bei Klassenmethoden, die in Delphi ebenfalls gebunden und ungebunden auftauchen können - da könnte dann p := @TKlasse.Klassenmethode je nach dem Typen von p zwei verschiedene Bedeutungen haben, wenn nicht dass @ beim Methodenzeiger verboten wäre. Auf diese Weise hat man zwar ein anderes Problem am Hals, nämlich dann, wenn kein @ gegeben ist, aber aus dem Kontext sollte sich leicht ergeben, ob auf den Methodenzeiger oder das Ergebnis zurückgegriffen wird. |
Re: [FreePascal] Ereignisse an Komponenten knüpfen
Ich versteh das nicht so richtig ;) Aber ich versuche mal es in meinen Worten zusammenzufassen:
Das Problem mit dem "@" ist, dass man nicht weiß ob der Zeiger auf die Methode gemeint ist, oder, wenn es eine Funktion ist, der Rückgabewert der Methode. Ist das korrekt wiedergegeben? Naja, da es eine "procedure" ist, ist das kein Problem. MfG xZise |
Re: [FreePascal] Ereignisse an Komponenten knüpfen
Nein, du kannst keine Adresse eines Rückgabewertes nehmen. Der Punkt ist, dass du eine parameterlose Methode ohne Rückgabewert entweder als procedure(Self: TIrgendwas) (ungebundener Methodenzeiger, auch wenn du in Delphi nur Pointer nehmen darfst, wenn du nicht castest) oder als procedure of object (gebundener Methodenzeiger) interpretieren kannst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 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