Thema: Delphi Adresse eines Objektes

Einzelnen Beitrag anzeigen

Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#3

Re: Adresse eines Objektes

  Alt 2. Jul 2009, 12:26
Hallo

also Objekte sind bereits Pointer. Ein Objektpointer zeigt auf Daten im Arbeitsspeicher die dieses beschreiben. Vielleicht hilft die folgendes Beispiel das zu verstehen:
Delphi-Quellcode:
var
  MyObject : TMyObject;
  YourObject : TMyObject;
begin
  MyObject := TMyObject.Create; // Erzeugen einer neuen Instanz
  YourObject := MyObject; // Nun gebe ich YourObject den selben Wert wir MyObject

  MyObject.XYZ := 12; // Ich setze die fikive Eigenschaft XYZ einfach mal auf 12

  if YourObject.XYZ = 12 then ShowMessage('So siehts aus!');
  // Ja auch YourObject ist jetzt XYZ = 12

end;
Wie gesagt Objekte sind nur Pointer da MyObject ein Pointer ist, der auf Informationen einen Objektes zeigt, verschiede ich nun den Pointer auch in YourObject. Jetzt zeigen beide auf das gleiche Objekt. Wenn man ein Objekt kopieren will, dann muss man es klonen.

Zitat:
Aber self ist <> ppSystem[0]. Könnt ihr mir helfen?
Das ist ja logisch self ist ein Pointer der auf die Informationen zeigt. Nun ist nach deinem Code ppSystem[0] ein Zeiger auf self. Heißt eine Variable die auf einen Bereich im Speicher zeigt, der den Wert von self hat. Also alles ziemlich doppelt gemoppelt.

Okay jetzt aber zu deinem Problem:

Delphi-Quellcode:
unit A;

interface
uses
  B;

var
  ppSystem: array of TSystem; // Wieso einen Pointer auf einen Pointer, unnötige Rechenaufwand ( ^TSystem, TSystem ist ein Objekt -> auch ein Pointer )
  res: Integer;

begin
  [ppSystem wird von Hardware mit Adressen gefüllt]
  //Die Adressen sollen auf die Instanzen von TSystem zeigen, hier als Beispiel nur eine Instanz
  ppSystem[0] := TSystem.Create(); // <<-- brauchen wir nicht mehr weil
  //Methode der Instanz wird aufgerufen, möchte vermeiden hier den Zeiger auf die Instanz mitzugeben
  res := ppSystem[0].open; // Hier brauchen wir auch kein ^
end;
Aber eine Frage habe ich noch, welche Hardware gibt valide Pascal-Objekte zurück, sowas wär mir neu

Delphi-Quellcode:
unit B;
type
  TSystem = class(TObject)
  public
    function open(): Integer;
  end;

implementation
 
function TSystem.open: Integer;
begin
  //Hier benötige ich den Zeiger auf die Instanz
  //Self ist hier wohl der falsche Ansatz.
  result := Integer(self); //self <> ppSystem[0]
end;
Keine Ahnung ob das jetzt das ist was du willst. Aber es ist irgendwie komisch das Hardware hier was mit Objekten zu tun hat. Allerhöchsten wenn du mit DirectX oder sowas arbeitest, allerdings sind es dort COM-Interfaces.
Lars
There are 10 kinds of people in the world:
those who get binary, and those who don’t.
  Mit Zitat antworten Zitat