Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Methodenzeiger nach pointer konvertieren? [done]
maximus - Fr 07.11.03 16:54
Titel: Methodenzeiger nach pointer konvertieren? [done]
hi.
ich würd gern einen methoden zeiger zu einem pointer machen! Mir ist klar, dass er bereits ei pointer ist, aber die benutzung ist doch sehr eingeschränkt, weil der compiler immer denkt man wollte die methode ausführen.
Hab ihr da ne idee!
cu,
maximus - Fr 07.11.03 17:17
:idea: Wäre das richtig?:
Delphi-Quelltext
1: 2: 3: 4:
| function MethodeToPtr(var x):pointer; begin result := pointer(x); end; |
cu,
AndyB - Fr 07.11.03 18:03
Dann stelle dem Methodenzeiger doch einfach ein @ voran:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var ev: TNotifyEvent;
ev := MyObj.OnClick;
if @ev <> nil then ... if Assigned(ev) then ... |
maximus - Fr 07.11.03 18:16
bist du dir sicher, dass das nicht ein schnellschuss war?
wenn du @ev abfragst, dann erhälst du IMAO die addresse von ev :? ...nicht aber die addresse des events, also den wert von ev!
:?:
PS: es soll konvertiert werden nicht referenziert etc.
AndyB - Fr 07.11.03 18:38
maximus hat folgendes geschrieben: |
bist du dir sicher, dass das nicht ein schnellschuss war? |
Hast du es ausprobiert?
Delphi unterscheidet zwischen Prozeduralen/Methodenzeiger-Variablen und "normalen" Variablen beim @-Operator.
Bsp:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var ev: TNotifyEvent; begin ev := nil; if @ev = nil then ShowMessage('War doch nicht die Adresse von ev.'); end; |
Du wirst mir wohl zustimmen, das
ev nicht an der Speicheradresse 0 (=nil) liegt. Wieso kommt dann aber diese MessageBox. :roll:
maximus - Fr 07.11.03 18:48
Ich werde es dir ungetestet glauben..kann ja keiner ahnen das die eine sonderfall unterscheidung machen :? irgendwie inkonsequent! Aber soll mir recht sein, da das die sache natürlich sehr vereinfacht.
Vielen dank fürs stopfen meiner wissenslücke, hatte mich immer drüber geärgert :D
cu,
AndyB - Fr 07.11.03 18:58
maximus hat folgendes geschrieben: |
kann ja keiner ahnen das die eine sonderfall unterscheidung machen :? irgendwie inkonsequent! |
Wenn man es genau betrachtet ist es eigentlich nicht inkonsequent. Ein Methodenzeiger wird wie eine Funktion benutzt, also sollten auch die Operatoren für Prozeduren gelten. Und da @ bei einer Funktion die Adresse der Prozedur liefert, liefert auch @Methode die Adresse der Methode.
maximus - Fr 07.11.03 19:16
Wenn mans weiss und von der seite betrachtet, wirds schon logischer :wink: ...sehr lässig. Einfach @ und fertig!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!