Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Delphi Inline Assembler Zugriff auf Privates Objekt

  Alt 17. Nov 2003, 15:24
Zitat von mr2:
Warum?
Private Felder sind nun mal privat und wenn ihr über Trick 17 versucht direkt darauf zuzugreifen, macht ihr damit das ganze Konzept von OOP & Kapselung zu nichte
Hallo mr2,
wenn ich OLLI richtig verstehe, ist das nicht das eigentliche Problem: Private Felder sind außerhalb des Scopes auch in ASM nicht sichtbar. Vielmehr scheint er einen performaten Zugriff aus einer Hilfsklasse heraus erreich zu wollen (dies hätte man in C++ mit Friends, in Java mit protected und Packages und in Delphi eben über das selbe PAS-File erreicht). Darüber hinaus sind solche "17er Tricks", die Du zu meinen scheinst, auch mit purem ObjectPascal hinzubekommen...

[Edit]Inzwischen (ich hab mal wieder zulange getippt) hat OLLI das ja bestätigt [/EDIT]

Zitat von OLLI_T:
Es muss doch einen Weg geben, dem Compiler begreiflich zu machen, dass im Register ebx nicht der Zeiger auf das Objekt Self sondern eben ein anderes Objekt steht.
Hallo OLLI,

das sollte so Funktionieren (nur mit D7 getestet):
Delphi-Quellcode:
type
  TMyClass = class
  private
    FAttribute : Integer;
  public
    constructor Create(AValue: Integer);
  end;

constructor TMyClass.Create(AValue: Integer);
begin
  inherited Create;
  FAttribute:= AValue;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  myObject: TMyClass;
  myInt: Integer;
begin
  myObject:= TMyClass.Create(42);
  try
    asm
      mov ebx, myObject
      mov eax, TMyClass([ebx]).FAttribute
    end
  finally
    myObject.Free;
  end;
end;
in eax landet, wir erwartet, 0x2a.

Vielleicht kannst Du einmal eine Zuweisung in der Delphi Language schreiben, die Du gerne 1:1 in ASM hättest?
gruß, choose
  Mit Zitat antworten Zitat