Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 13. Jun 2020, 11:26
1. in dem Projekt gibt es in deinem DCU-Ausgabeverzeichnis nur eine DCU der Unit A.

Wenn du in deinen USES den Unitnamen von A angibst, dann wird deine DCU benutzt,

aber, verwendest du noch andere Dateien, wo du die originale DCU von DELPHI verwendest, die in sich eine Unit A einbinden,
dann sind die ja bereits fertig kompiliert und haben daher natürlich weiterhin die originale DCU A gelinkt,
womit es dann in deiner EXE zwei Mal die A gibt.

Willst du etwas Fixen, und du bist nicht der Einzige, welcher diese Unit linkt und der Fix soll überall rein,
dann mußt du also alle Units kopieren und neu kompilieren, auch Jene, welche diese Unit ebenfalls verwenden und die auch diese verwenden usw.



Da kommt man womöglich/vermutlich mit Hooks besser, wenn man nicht der Einzige ist, der diese Unit einbindet.
Oder der Kompiler gibt den Hinweis aus, dass Unit X mit einer anderen Version von A kompiliert wurde, und er bricht den Kompiliervorgang ab.

Zuweilen stellt Delphi von ganz alleine beim Kompilieren fest, dass es da einen Konflikt gibt und weist darauf hin.

Zumindest Delphi 7 und älter konnten sowas. Geht das heute nicht mehr?

Eigentlich ist wichtig, dass man die veränderten Sourcen ins Projekt aufnimmt und sicherstellt, dass der Kompiler nur diese und die zugehörigen DCUs finden kann.

D. H.: Die "Originale" sollten in allen Pfadangaben hinter den eigenen, veränderten Sourcen / DCUs zu finden sein (oder im Idealfall garnicht zu finden sein).

Wurde eine Unit mit Deiner veränderten FMX.ListView.pas im Uses kompiliert und Dein Projekt enthält eine weitere Unit, die mit der originalen FMX.ListView.pas im Uses kompiliert wurde, so sollte der Kompiler dies bemerken und Dich darauf hinweisen.

Im Zweifelsfalle nehme ich immer alle Units in die DPR auf, die "irgendwo" in einer Unit des Projektes per Uses aufgerufen werden und bei denen die Möglichkeit eines Konfliktes bestehen könnte. Damit habe ich bisher immer alle Konflikte auflösen können (auch wenn die DPR dadurch schonmal etwas unübersichtlich lang werden kann).

Der DCU-Ausgabepfad ist bei mir immer gesetzt, so dass die Original-DCUs eventuell neu zu kompilierender "delphieigener Units" nicht überschrieben werden.
  Mit Zitat antworten Zitat