Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#83

AW: Delphi 10.1 Berlin

  Alt 20. Apr 2016, 10:11
Das heißt dann wohl, dass ich Bugs wie den in TRSACypher nun nur noch durch direkten Speicherzugriff lösen kann...
Das bedeutet Umbaumaßnahmen hin zu echt bösem Code... aber wird dann wohl nicht anders gehen, wenn die Anwendungen nicht beim Beenden abstürzen sollen und das in 10.1 noch nicht behoben sein sollte...
Über die erweiterte RTTI kommst du dennoch ran. (ist dann halt nur ein bisschen hässlicher oder unperformanter)

Alternativ gibt es noch den Weg über eine Dummy-Klasse und einen bösen Cast. (ergibt einen schönen Compilerhinweis)
Delphi-Quellcode:
{
  TWinControl = class(TControl)
  private
    FAlignControlList: TList;
    FAlignLevel: Word;
    FBevelEdges: TBevelEdges;
    FBevelInner: TBevelCut;
    ...
}


type
  THackedWinControl = class(TControl)
  public
    FAlignControlList: TList; // Pointer
    FAlignLevel: Word;
    FBevelEdges: TBevelEdges; // Byte
    FBevelInner: TBevelCut;
  end;

THackedWinControl(Edit1).FBevelInner
Problem hierbei treten auf, wenn in einer anderen Delphi-Vesion die Klasse anders aufgebaut ist und das Gewünschte nun an einer anderen Speicheradresse liegt.
Von der Laufzeit her ist das genauso schnell, als wäre es schon immer Public, aber man sollte zu Programmstart die korrekte Position irgendwie prüben.

Man kann aber auch vorher per RTTI die Stelle suchen und dann im laufenden Code böse rumpointern.
PBevelCut(IntPtr(Self) + Offset)^ // IntPtr=NativeUInt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Apr 2016 um 10:18 Uhr)
  Mit Zitat antworten Zitat