Autor Beitrag
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 07.11.03 16:54 
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,

_________________
mfg.
mâximôv


Zuletzt bearbeitet von maximus am Fr 07.11.03 17:51, insgesamt 1-mal bearbeitet
maximus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 07.11.03 17:17 
:idea: Wäre das richtig?:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
    function MethodeToPtr(var x):pointer;
    begin
      result := pointer(x);
    end;


cu,

_________________
mfg.
mâximôv
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 07.11.03 18:03 
Dann stelle dem Methodenzeiger doch einfach ein @ voran:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var ev: TNotifyEvent;

ev := MyObj.OnClick;

if @ev <> nil then ...
// ist dasselbe wie:
if Assigned(ev) then ...

_________________
Ist Zeit wirklich Geld?
maximus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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.

_________________
mfg.
mâximôv
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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:
ausblenden 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:

_________________
Ist Zeit wirklich Geld?
maximus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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,

_________________
mfg.
mâximôv
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

_________________
Ist Zeit wirklich Geld?
maximus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 07.11.03 19:16 
Wenn mans weiss und von der seite betrachtet, wirds schon logischer :wink: ...sehr lässig. Einfach @ und fertig!

_________________
mfg.
mâximôv