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