Ich muss eine Methode in Classes.pas
patchen(TReader.ReadString - Ich möchte es zwingen, eine bestimmte Codepage zu verwenden, nicht die Systemvorgabe).
Wenn ich Classes.pas in mein Projekt kopiere, muss ich am Ende die gesamte VCL neu erstellen. Gibt es eine (einfache) Möglichkeit, eine Methode zur Laufzeit zu patchen?
Ich habe VCLFixPatch gefunden:
Ich habe die Techniken verwendet, um die Methode zu ersetzen, die ich zur Laufzeit patchen wollte.
Wenn Sie die Implementierungsseite von Classes.pas ändern, müssen Sie nicht alles neu kompilieren. Delphi findet heraus, ob eine Einheit mit einem Algorithmus neu kompiliert werden muss, der ungefähr so aussieht:
Das wichtige Konzept ist das der Symbolversion . Beim Speichern einer DCU berechnet Delphi einen Hash basierend auf der Schnittstellendeklaration des Symbols und ordnet es dem Symbol zu. Andere Einheiten, die das Symbol verwenden, speichern auch die Symbolversion. Auf diese Weise werden Link-Zeit-Konflikte, die durch veraltete Symbole verursacht werden, im Gegensatz zu den meisten C-Linkern vermieden.
Daraus folgt, dass Sie in der Lage sein sollten, Classes.pas zu Ihrem Projekt hinzuzufügen und seinen Abschnitt implementation fast nach Herzenslust zu modifizieren und dennoch statisch < strong> Verknüpfung mit dem Rest der RTL- und VCL-Bibliotheken sowie Bibliotheken von Drittanbietern, auch wenn diese nur im Objektformat bereitgestellt werden.
Zu beachten:
Tags und Links delphi delphi-2009