AW: Kann ein Objekt seinen Namen ausgeben?
Und mit dem Code von Jänicke könnte ich dann zeigen, dass alle Variablen, die sich auf das selbe Objekt beziehen, die gleiche Speicheradresse angeben?
|
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
Delphi-Quellcode:
a eigentlich nur ein Integerwert ist. Siehe:
var a: TObject;
Delphi-Quellcode:
Deshalb klappt das auch was Uwe Raabe geschieben hat:
var
a: TObject; begin a := TObject.Create; ShowMessage(IntToStr(Integer(a))); a.Free; end;
Delphi-Quellcode:
a und b zeigen auf das gleiche Objekt, weil a nur eine Adresse ist und b die Adresse kopiert hat. Die Instanz wurde erstellt und die Adresse a zugewiesen. Aber keiner verbietet es die an b weiter zu geben.
var
a: TObject; b: TObject; begin a := TObject.Create; b := a; end; EDIT: Deshalb klappt auch das:
Delphi-Quellcode:
EDIT2:
procedure TForm1.Button1Click(Sender: TObject);
var Btn: TButton; Btn2: TButton; begin if Sender is TButton then begin Btn := Sender as TButton; //oder //Btn := TButton(Sender); ShowMessage(Btn.ClassName); Btn2 := Btn; Btn2.Caption := Btn2.ClassName; end; end; Um das ganze noch lustiger zu machen:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Btn: TButton; Int: Integer; begin if Sender is TButton then begin Btn := Sender as TButton; Int := Integer(Btn); ShowMessage('Wert von Int: ' + IntToStr(Int) + '; Name von Button: ' + TButton(Int).Name); end; end; |
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
|
AW: Kann ein Objekt seinen Namen ausgeben?
Delphi-Quellcode:
oder inkl. der Delphi-Signatur "$"
Format('%p = %p', [Pointer(VarA), Pointer(VarB)])
Delphi-Quellcode:
Format('$%p = $%p', [Pointer(VarA), Pointer(VarB)])
SysUtils.Format Zur Konvertierung in einen "Integer", sollte man vielleicht besser z.B. IntPtr für's Casten verwenden. z.B. bei Win64 würde eingefrorene/kaputtgemachte Integer ja einen Fehler bringen und die Hälfte abschneiden, aber hoffentlich merkt der Compiler den Fehler und stoppt mit einem Compilerfehler, weil die Größe nicht passt. |
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
|
AW: Kann ein Objekt seinen Namen ausgeben?
Ups.
Grund: Früher war der Integer mal ein "dynamischer" Type, welcher mit dem System mitgewachsen ist. In Windows 3.1 (16 Bit) war er 16 Bit groß, also 2 Byte. In den 32-Bit-Windows-Versionen ist er 32 Bit groß, also 4 Byte. Und theoretisch hätte er dann im 64-Bit-Bindows dann 64 Bit sien müssen, aber die große Firmen (wie Intel) entschieden sich den Einzufrieren und erfanden dafür einen neuen Typen, welcher nun mitwächst, was im Delphi jetzt der NativeInt ist. Allerdings wurden auch Typen erfunden, welche in ihrer Größe direkt an die Pointer gebunden ist, wie z.B. der IntPtr (Pointer zu Interger). |
AW: Kann ein Objekt seinen Namen ausgeben?
Zitat:
|
AW: Kann ein Objekt seinen Namen ausgeben?
Nach der Logik müßte der 256 Bit Integer dann VeryRealNativeInt heißt. Und sollte bis dahin die Welt nicht untergehen und es irgendwann den 512 Bit Integer geben, wird er kurz einfach DirectorsCutInt heißen.
|
[Gelöst] AW: Kann ein Objekt seinen Namen ausgeben?
Herzlichen Dank für die freundlichen Erklärungen!
Hab in der Zwischenzeit damit herumprobiert und ein wenig mehr verstanden. Kann eure Community nur weiterempfehlen. hg, Delfie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz