![]() |
Re: Wie ermittelt man welche Komponenten in einem Package si
Zitat:
Zitat:
[OffTopic, nur zur Erklärung, nicht zur Diskussion] [edit]...(Erklärung entfernt, da OT)[/edit] Deshalb möchte ich vorher durch ein kleines Testprogramm alle einzubindenden Package untersuchen ob "doppelte" Komponenten enthalten sind dann kann man vor dem Kompilieren schon darauf reagieren. (Diese Funktionalität soll auch noch zu Diagnosezwecken beim Delphi Start laufen, ...) Da dieses Testprogramm nur auf dem Buildserver läuft (auf dem auch eine vollständige Lizenz des Delphi installiert ist) besteht keine Lizenzverletzung. [/OffTopic] Liebe Grüße MaBuSE |
Re: Wie ermittelt man welche Komponenten in einem Package si
Zitat:
Ich habe gerade bemerkt warum dass nicht geht. Lieber Hagen, Du hast Recht. In den DesigntimePackages (dcl*.bpl) sind natürlich keine Komponenten definiert. Die sind ja in den RuntimePackages. Die benötigten Runtimepackages bekomme ich ja mit meiner Methode raus, ich muss also alle RuntimePackages durchlaufen um "doppelte" Komponenten zu finden. Da zu lade ich alle DesigntimePackages und merke mir welche Packages benötigt werden. Dann schaue ich alle (diese benötigten) RuntimePackage duch und wenn eine Komponente doppelt vorkommt, weiss ich ja welche 2 RuntimePackage davon betroffen sind und kann daraus schliessen, weche DesigntimePackage dafür verantwortlich sind. Vielen Dank, wenn ich das mal soweit "fertig" habe, werde ich es hier aud Anfrage veröffentlichen. |
Re: Wie ermittelt man welche Komponenten in einem Package si
Anmerkungen und Links zu deisem Thema:
Ich kann zwar kein Chinesisch, aber ![]() ![]() Folgende Artikel beschäftigen sich auch mit Packages zur Laufzeit: |
Re: Wie ermittelt man welche Komponenten in einem Package si
Zitat:
Die für dich relevanten Klassen sollten alle in Runtime Packages enthalten sein, aber das ist eben bei so manchen Libraries nicht der Fall. Die Methode mit dem Finden doppelter Komponten steckt in ähnlicher Form schon un der Funktion LoadPackage() drinnen. Diese benutzt aber nicht die Komponenten sondern die UNIT Listen die in der Resourcen der Packages eingelinkt werden. Vorteil dabei ist das man beim Zugriff auf solche Packages um diese Resource zu laden diese DLL nicht komplett laden braucht. Sprich man lädt sie nur als Resourcen-DLL, lädt die UNIT-Resource, und vergleicht deren Inhalt mit den UNITs der anderen Packages. In einem Projekt ist ein UNIT-Name packagebezogen immer eineindeutig. Eventuell könnte dies deine Überprüfung enorm erleichtern. Schau dir dazu mal den Source von SysUtils.CheckForDuplicateUnits().InternalUnitChec k() genauer an. Ich habe aber noch nicht ganz den Sinn der Übung verstanden, wie ihr eure Projekte verwaltet, ist aber auch nicht so wichtig. Gruß hagen |
Re: Wie ermittelt man welche Komponenten in einem Package si
Achso, sich an den Klassen/Komponenten als Vergleichskriterium festzuklammern kann nach hinten losgehen. Denn es ist schon erlaubt das man in verschiedenen Units einen Klassennamen mehrmals benutzen darf, und dies kommt sogar manchmal vor. Aber ein UNIT-Name muß eben innerhalb der geladenen Packages eineindeutig sein.
Gruß Hagen |
Re: Wie ermittelt man welche Komponenten in einem Package si
Zitat:
Danke an Alle für die ausführliche Hilfe. Das Wissen kann ich trotzdem sehr gut gebrauchen :mrgreen: (, und der Eine oder Andere vieleicht auch) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 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