AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi schreibender Zugriff auf private Variablen ?
Thema durchsuchen
Ansicht
Themen-Optionen

schreibender Zugriff auf private Variablen ?

Ein Thema von MaBuSE · begonnen am 6. Nov 2007 · letzter Beitrag vom 7. Nov 2007
 
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: schreibender Zugriff auf private Variablen ?

  Alt 6. Nov 2007, 16:52
@Phoenix: Da steht aber nur der Zeiger. Das wird recht kompliziert.

Erweiterte Möglichkeit zu Phoenix:
Variable ist "String", also dynamisch. Damit muss sie definitv in der RTTI auftauchen.

Die RTTI zum Datenrecord einer Klasse findest du so
Delphi-Quellcode:
var inittable:^pointer;
begin
  inittable:=pointer(integer(self.classparent)+vmtinittable); //oder noch mehr classparent's; je nachdem wo man hinwill
  //oder nicht im Parent, dann pointer(integer(ppointer(self)^)+vmtinittable);
                          //bzw. pointer(integer(mytest.classInfo)+vmtinittable);

  if inittable<> nil then
    inittable:=inittable^
  else
    //diese Klasse hat (in der Generation) keine dynamischen Komponenten
Dort (bei inittable) dürftest du erstmal ein $0E für Record finden, dann einen Shortstring der nur aus dem Längenbyte besteht (indem 0 drinn steht), und dann kommt folgender Datenkonstrukt
Delphi-Quellcode:
//RTTI eines Records
type PPropContent=^TPropContent;
     TPropContent=record
       RecordData:pointer; //RTTI einer dynamischen Variablen innerhalb des Records
       Position:LongInt; //Position der Variablen im Record
     end;
type PRecordData=^TRecordData;
     TRecordData=record
       ParamCount:cardinal; //Größe des Records insgesamt
       PropCount:cardinal; //Anzahl der dynamischen Komponenten
       Content:array[0..16737] of TPropContent;
end;
Dich interessiert davon das Array Content[0..Propcount-1]. Und in jedem Element des Arrays hlst du dir RecordData. Das ist ein Zeiger auf einen Zeiger auf die RTTI der dynamischen Komponente aus deiner Klasse. Und wenn dort das erste Byte $0A ist, dann ist die dynamische Komponente ein String (Du kannst auch mit den Konstanten aus der TypeInfo arbeiten tkString=10).
Jetzt weist du dass diese dynamische Komponente ein String ist und du nimmst dir Position, addierst den Wert zu self und hast deinen String.
Und jetzt musst du den Inhalt überprüfen, wie Phoenix sagte.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 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