Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#19

AW: Adresse einer privaten Methode bekommen

  Alt 19. Jul 2010, 07:09
strict private sollte doch eigentlich komplett privat sein, also nichtmal in einer anderen Klasse, der selben Unit.
Und selbt normale private Methoden kann man "eigentlich" nicht von anderen Units aus aufrufen.

Wollte erst fragen, ob du das auch mal mit getrennten Units getestes hast, aber selbst da geht es.
Nein hab ich nicht, aber ich hatte erst testweise probiert, ob man in einem Class-Helper auf unter strict private deklarierte Methoden zugreifen kann, was nicht ging. Daraufhin hab ich dann mal probiert ob es im Inline-Assembler funktioniert, und da es funktionierte, bin icheinfach mal davon ausgegangen, dass das auch in verschiedenen Units funktionieren muss. Denn bei Strict Private hat die beinhaltende Unit ja im Gegensatz zum normalen private keine Privilegien.
Also dieser Hack ist dann ja richtig böse
Danke

[edit]
Es gibt abner noch einen einfachen Hack, um virtuelle private Methoden zu bekommen ... ohne RTTI- oder VMT-Auslesen und so.

Einfach 'ne Dummy-Klasse, ebenfalls mit diesen virtuellen Methoden (natürlich in selber Reihenfolge) erstellen und rübercasten.
Aber was für einen Sinn sollte es haben, private Methoden als virtual zu deklarieren? Mann kann sie doch eh nicht überschreiben, weil man in abgeleiteten Klassen keinen Zugriff darauf hat.
[/edit]

Geändert von Namenloser (19. Jul 2010 um 07:14 Uhr)
  Mit Zitat antworten Zitat