Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie ermittelt man welche Komponenten in einem Package sind? (https://www.delphipraxis.net/44581-wie-ermittelt-man-welche-komponenten-einem-package-sind.html)

MaBuSE 25. Apr 2005 12:23

Re: Wie ermittelt man welche Komponenten in einem Package si
 
Zitat:

Zitat von negaH
Vergiss es, das was du vorhast kann nicht funktionieren. Du versucht die Packages der Delphi IDE zu laden, diese können aber nur innerhalb vom Delphi selber geladen und benutzt werden.

So langsam habe ich auch das Gefühl, dass das nicht klappt.

Zitat:

Zitat von negaH
Erkläre mal was du überhaupt vor hast, denn so wie ich das sehe läuft es auf einen Verstoß gegen die Lizenzbestimmungen hinaus.

Nein, ich will nicht gegen die Lizenzbestimmungen verstoßen.

[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

MaBuSE 25. Apr 2005 12:49

Re: Wie ermittelt man welche Komponenten in einem Package si
 
Zitat:

Zitat von negaH
Vergiss es, das was du vorhast kann nicht funktionieren. Du versucht die Packages der Delphi IDE zu laden, diese können aber nur innerhalb vom Delphi selber geladen und benutzt werden.

AAAARRRG :wall:

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.

MaBuSE 25. Apr 2005 13:03

Re: Wie ermittelt man welche Komponenten in einem Package si
 
Anmerkungen und Links zu deisem Thema:
Ich kann zwar kein Chinesisch, aber hier (GoogleCache) wird gezeigt, die man durch Zuweisen der Classes.RegisterComponentsPro mit einer eigenen Prozedur an diese Informationen kommt. Das ist die gleiche Idee, die ich auch schon letzte Woche hatte, nur die Funktioniert bei mir nicht. Es tritt trotzdem der Fehler auf. (Meine Prozedur wird nicht ausgeführt.)

Folgende Artikel beschäftigen sich auch mit Packages zur Laufzeit:

negaH 25. Apr 2005 16:21

Re: Wie ermittelt man welche Komponenten in einem Package si
 
Zitat:

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.
Richtig, mal abgesehen von den nötigen Designtime Komponenten wie Property Editoren usw. Diese benötigen aber immer auch die Funktionen der IDE oder genauer gesagt der ominösen Proxies.dcu :)

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

negaH 25. Apr 2005 16:24

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

MaBuSE 25. Apr 2005 16:29

Re: Wie ermittelt man welche Komponenten in einem Package si
 
Zitat:

Zitat von negaH
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.

Stimmt, Du hast Recht. Ich brauche ja nur auf Unit Ebene zu schauen :wall:

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.
Seite 3 von 3     123   

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