![]() |
Delphi-Version: 11 Alexandria
Wie ermittelt man die Adresse der Instanz einer Komponente?
Hallo zusammen,
ich bräuchte in einer Komponente die konkrete Adresse der Instanz dieser Komponente. Also z. Bsp.
Delphi-Quellcode:
@self funktioniert nicht.type abc = class(tComponent) private p: Pointer; ... procedure P1; end; IMPLEMENTATION procedure abc.P1; begin p:=@self; ... end; Wie geht es auf anderem Weg? |
AW: Wie ermittelt man die Adresse der Instanz einer Komponente?
abc ist die Klasse, du willst aber die Instanz bzw. dessen Adresse und für eine solche braucht man eine Variable der entsprechenden Klasse.
Delphi-Quellcode:
Grüße
type
abc = class(tComponent) private i: Integer; ... end; procedure A; var Labc: abc; begin DoSomething(@Labc); end; Dalai |
AW: Wie ermittelt man die Adresse der Instanz einer Komponente?
Zitat:
Delphi-Quellcode:
procedure abc.P1;
begin p:=self; ... end; |
AW: Wie ermittelt man die Adresse der Instanz einer Komponente?
Genau auch meine Überlegung!
Aber es funktioniert nicht !!! Das ist mein Problem! |
AW: Wie ermittelt man die Adresse der Instanz einer Komponente?
@Self geht,
wobei das natürlich schwachsinn ist, da du "SO" nur die Adresse der Variable bekommst, in welcher das Self aktuell gespeichert ist. Normal ist das aber eigentlich keine Speicheradresse, sondern das EAX-Register, beim Start der Methode, wobei es dann oft in den Stack geschoben wird und du dann den Zeiger auf eine Stelle im Stack bekommst. Und diese Adresse wird nach Ende der Methode selbstverständlich ungültig. :stupid: Warum ein besch**** Zeiger, anstatt einer Variable vom Instanztyp direkt? Objekte sind bereits "Zeiger", welche "intern" auf ihren eigenen Speicher zeigen. Hmmmmm: Abgesehn davon hat es irgendwie keinen verständlichen Sinn, innerhalb des eigenen Objektes einen Zeiger auf sich selbst zu haben, wo man doch sowieso direkt auf sich selbst zugreifen kann. Wozu soll das Ganze also eigentlich dienen? |
AW: Wie ermittelt man die Adresse der Instanz einer Komponente?
Vielleicht hilft es Dir hier weiter:
![]() Du brauchst keinen einfachen Pointer, sondern einen Methoden-Pointer = "eine Referenz auf eine Methode einer Instanz einer Klasse". Und das ist ein Record aus u. a. 2 Pointern:
Delphi-Quellcode:
TMethod = record
Code, Data: Pointer; public ... end; |
AW: Wie ermittelt man die Adresse der Instanz einer Komponente?
Zitat:
|
AW: Wie ermittelt man die Adresse der Instanz einer Komponente?
Liste der Anhänge anzeigen (Anzahl: 1)
Simpler ideas:
Code:
Anhang 56454
procedure TForm10.FormCreate(Sender: TObject);
var P: Pointer; T: TForm10 absolute P; begin P := Addr(Self); P := PPointer(P)^; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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