Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Protected-Methode, welche nicht virtual ist, einer Basis-Klasse überschreiben (https://www.delphipraxis.net/215589-protected-methode-welche-nicht-virtual-ist-einer-basis-klasse-ueberschreiben.html)

swestner 1. Aug 2024 00:45

Delphi-Version: 12 Athens

Protected-Methode, welche nicht virtual ist, einer Basis-Klasse überschreiben
 
Hallo,

in DUnit in der Datei GUITestRunner gibt es eine nicht-virtuelle protected-Methode


function TGUITestRunner.IniFileName: string;
const
TEST_INI_FILE = 'dunit.ini';
begin
result := ExtractFilePath(Application.ExeName) + TEST_INI_FILE
end;

Diese liefert als Pfad zum Speichern der DUnit.ini-Datei immer das Verzeichnis der EXE zurück.

Ich würde hier gerne ein anderes Verzeichnis setzen bzw. auch den Dateinamen ändern.

Dazu müßte ich in meinem Testcase das IniFilename überschreiben.

Das geht aber nicht, da die Methode nicht virtuell ist.

Den Source möchte ich auch nicht kopieren, das schafft wieder Abhängingekeiten usw.

Gibt es eine Möglichkeit, die nicht-virtuelle protected-Methode zu überschreiben / ersetzen?

Ich habe schon ein class-Helper versucht aber das hat nicht funktioniert.

Grüße

Stefan

himitsu 1. Aug 2024 02:16

AW: Protected-Methode, welche nicht virtual ist, einer Basis-Klasse überschreiben
 
Die Funktion im Code direkt umschreiben,
also z.B. den Pfad anders festlegen
oder oben in der Klasse eine Vraiable/Property einfügen und unten benutzen
oder oben das fehlende virtual einfügen und ableiten

oder ein Hook. (im Prinzip wird da der Anfang der Methode im Kompilat überschrieben, zur Laufzeit, und dort ein JUMP eingefügt, welcher auf eine andere Methode zeigt)
prozedur hookprozedur hook
Hier im Forum suchenprozedur hook
Bei Google suchendelphi prozedur hook


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 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