![]() |
Was macht der Typecast Pointer()?
Hallo,
meine Frage steht schon im Titel. Was macht der Typecast Pointer()? Macht er das gleiche, wie der @-Operator. Ich habe neulich beides getestet und, auf einen Integer angewendet, es kam etwas verschiedenes dabei raus. mfg Armin |
Re: Was macht der Typecast Pointer()?
Pointer tut so als wäre eine bestimmte Variable ein Pointer, @ ermittelt die Adresse einer Variablen.
|
Re: Was macht der Typecast Pointer()?
Delphi-Quellcode:
liefert die Adresse der Variable
adr := @<Variable>;
Delphi-Quellcode:
betrachtet den Inhalt als Adresse
adr := Pointer(<Variable>);
|
Re: Was macht der Typecast Pointer()?
Es kommt doch aber nix sinnvolles dabei raus, wenn ich das auf einen Integer anwende. Ich bekomme dann doch einen Pointer der halt irgendwo hin zeigt.
Wie sieht das dann bei der Anwendung auf eine Klasse aus? Warum die Frage überhaupt? Ich habe diese Code hier gefunden:
Delphi-Quellcode:
procedure TForm2.ExecMethod(OnObject: TObject; MethodName: string) ;
var Routine: TMethod; Exec: TExec; begin Routine.Data := Pointer(OnObject) ; { <- hier die Stelle } Routine.Code := OnObject.MethodAddress(MethodName) ; if NOT Assigned(Routine.Code) then Exit; Exec := TExec(Routine) ; Exec; end; |
Re: Was macht der Typecast Pointer()?
Zitat:
Delphi-Quellcode:
var
Pointer1, Pointer2: Pointer; ... Pointer2 := Pointer( Integer(Pointer1) + 5 ); // 5 Bytes hinter Pointer 1 Zitat:
Und eine Methode (TMethod) ist nun mal als Record so aufgebaut, dass eine Referenz (Pointer) auf das Objekt und die Adresse der Funktion gespeichert wird. Die Referenz wird benötigt, weil jede Methode einen unsichtbaren ersten Parameter self hat - der ist nötig, damit du auf die Felder des jeweiligen aufrufenden Objekts zugreifen kannst. |
Re: Was macht der Typecast Pointer()?
Jup, ich meinte ein Objekt einer Klasse :zwinker:
Warum bekomme ich eigentlich bei einen @Methoden() keinen Pointer zurück, sondern eine Fehlermeldung, dass Parameter fehlen? oO Eigentlich müsste das doch klappe, oder? Bzw. wo liegt der Unterschied zwischen Methoden (Prozeduren/Funktionen einer Klasse) und normalen Prozeduren/Funktionen? |
Re: Was macht der Typecast Pointer()?
Der Unterschied ist, dass bei Methoden immer die Referenz auf das Objekt mitgeliefert werden muss. TMethod ist deshalb auch ein Record mit zwei Pointern, während eine normale Funktion/Prozedur nur einen Pointer hat. Aus diesem Grund wird der @-Operator wahrscheinlich unterbunden.
|
Re: Was macht der Typecast Pointer()?
Wie kann ich dann einen Pointer auf eine Methode bekommen?
Delphi-Quellcode:
Diesen Code habe ich dazu gefunden gehabt, nur liefert mir die Methode MethodAddress leider immer nil zurück, auch wenn das Objekt schon instanziiert ist und eben eine besagte Methode vorhanden ist.
var
Routine: TMethod; Exec: TExec; begin Routine.Data := Pointer(OnObject) ; Routine.Code := OnObject.MethodAddress(MethodName) ; if NOT Assigned(Routine.Code) then Exit; Exec := TExec(Routine) ; Exec; end; |
Re: Was macht der Typecast Pointer()?
Zitat:
|
Re: Was macht der Typecast Pointer()?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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