Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#1

Unter welchen Bedingungen wird ein System-Unit Fix kompiliert und eingebunden ?

  Alt 12. Jun 2020, 16:05
Delphi-Version: 10.4 Sydney
Hallo zusammen,

ich möchte ein System-Unit ändern, und in meiner Library neu kompilieren lassen,
möglichst so das alle statischen Verweise darauf in anderen Orginal System-Units und Libraries umgelenkt werden.

Ich nehme als Beispiel mal FMX.ListView
FMX.ListView.pas // <== dies enthält ein paar Fixes, und das möchte ich in meinem Projekt nutzen
das Unit includiert ein paar weitere Units

Delphi-Quellcode:
Uses
    ...
    , FMX.ListView.Adapters.Base
    , FMX.ListView.Appearances
    , FMX.ListView.Types.pas
    , FMX.ListView.iOS
...
Die nehme ich vorsichtshalber auch mit in mein Projekt, damit auf jden Fall alle zusammenhängenden Units neu kompiliert werden.

Wenn ich die in mein Projektverzeichnis lege, und in meine Projekt DPR einfüge

Delphi-Quellcode:
program T342_Test;

{$R *.dres}

uses
  System.StartUpCopy,
  FMX.Forms,
  UMain_Frm in 'UMain_Frm.pas{Form_Main},
  UMain_Modules in 'UMain_Modules.pas',
  FMX.ListView in 'FMX.ListView.pas',
  FMX.ListView.Types in 'FMX.ListView.Types.pas',
  FMX.ListView.iOS in 'FMX.ListView.iOS.pas',
  FMX.ListView.Adapters.Base in 'FMX.ListView.Adapters.Base.pas',
  FMX.ListView.Appearances in 'FMX.ListView.Appearances.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm_Main, Form_Main);
  Application.Run;
end.
.. dann scheint es zu funktionieren wie gewünscht.
Der Debugger kann die DCU-Units richtig zuordnen, die Debug-Breaks scheinen zu stimmen.

D.h. ich vermute das die neu kompilierten Units auch korrekt in meinem Projekt angemommen sind.

Erste Frage:
Wie kann ich sicher sein das nicht ein anderes System-Unit noch die Orginale Unit benutzt,
und ich zwei "DCU-Versionen" in mein Projekt einbinde ?


Ich würde dieses Chaos in der DPR gerne aufräumen, und leider erlaubt die IDE/Compiler keine Unterverzeichnisse an bestimmten Stellen.
Deshalb mache ich das sicherheitshalber immer so wie oben.

Meine zweite Frage ist,
wie könnte ich diese Fixes besser zusammenfassen ?,
am Besten so das ich nicht alle Units (keine) in der DPR auflisten muss.


A.) Meine Versuche das in Unterverzeichnisse zu legen funktioniert anscheinend nicht zuverlässig
Project\TestProject.dpr
Project\Fixes\FMX.ListView.pas
...


B. Meine Versuche nur eine zentrale Fixes.pas Unit in das Projektverzeichnis zu legen funktioniert anscheinend auch nicht sicher.
Project\TestProject.dpr
Project\Fixes.pas //<=============
Project\Fixes\FMX.ListView.pas
...

mit der zentralen Unit in der DPR

Delphi-Quellcode:
unit Fixes;

interface

Uses
    FMX.ListView
  , FMX.ListView.Types
...

implementation

end.


C. Ich habe auch probiert die Orginal-Units per include in Wrapper-Units zu laden,
um so zumindest verschiedene IDE-Versionen zu kapseln, so in der Art
Delphi-Quellcode:
unit FMX.ListView;

{$IF     DEFINED( RX1040 ) }
{$I FMX.ListView_Rx1040 }
{$ELSEIF DEFINED( RX1033 ) }
{$I FMX.ListView_Rx1033 }
{$ENDIF }
Das geht wenn man in den Varianten-Units den Header weglässt, löst aber nicht mein eigentliches Problem, das ich die Files genre besser sortieren würde.

Bin ich der Einzige dem solche Chaos-Anordnungen auf die Nerven gehen,
oder hat vielleicht jemand einen guten Tipp wie man das Ganze besser, sauberer organisieren könnte ?

Geändert von Rollo62 (13. Jun 2020 um 08:55 Uhr)
  Mit Zitat antworten Zitat