AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mittels CodeRedirect Funktionen patchen

Ein Thema von ConnorMcLeod · begonnen am 1. Mär 2012 · letzter Beitrag vom 2. Mär 2012
 
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

Mittels CodeRedirect Funktionen patchen

  Alt 1. Mär 2012, 18:21
Delphi-Version: 5
Hallo DPler,
wie es der Zufall will, habe ich ein ähnliches Problem wie Himitsu:

Ich möchte in der Unit <Graphics.pas> die Routine <RequiredState> vom TCanvas ersetzen. Das geht so (und funkt auch - getestet):

Neue Unit, z.B. UMyCanvas.pas, dort:

eine neue Klasse für den Hack, der Zugriff auf das private Feld <State> ermöglicht:

Delphi-Quellcode:
  THackCanvas = class(Graphics.TCanvas)
  private
    FHandle: HDC;
    State : TCanvasState;
  end;
Eine neue Klasse, in der die neue Routine definiert wird:
Delphi-Quellcode:
  TMyCanvas = class(Graphics.TCanvas)
  protected
    procedure RequiredStatePatch(ReqState: TCanvasState);
  end;
...
implementation
...
procedure TMyCanvas.RequiredStatePatch(ReqState: TCanvasState);
var
  NeededState: TCanvasState;
begin
  NeededState := ReqState - THackCanvas(Self).State;
end;
Im initialization-Teil wird dann mittels CodeRedirect (von http://chee-yang.blogspot.com/2008/11/hack-into-delphi-class.html) die Adresse der vorhandenen Routine durch die Adresse der neuen Routine ersetzt und die neue Routine wird künftig so verwendet, als ob sie ganz normal zu TCanvas gehören würde:

Delphi-Quellcode:
var
  P: TCodeRedirect;

initialization
  P := TCodeRedirect.Create(@TMyCanvas.RequiredState, @TMyCanvas.RequiredStatePatch);

finalization
  P.Free;
OK.

Das Problem ist: für den Zugriff auf <State> muss ich in RequiredStatePatch schreiben: THackCanvas(Self).State , damit das Ganze kompiliert; zur Laufzeit aber gilt das nicht mehr, weil sich die Routine - nach dem Umbiegen der Adresse - zu TCanvas zugehörig fühlt und deshalb hier nur State stehen dürfte. Irgendwie ein Henne/Ei-Problem.

Wenn zur Laufzeit THackCanvas(Self).State abgefragt wird, dann bringt das ein falsches Ergebnis.

War das halbwegs verständlich bzw wer weiss Rat?
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod ( 1. Mär 2012 um 18:23 Uhr) Grund: Tags ergänzt
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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