AGB  ·  Datenschutz  ·  Impressum  







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

Resourcen aus statisch eingebunder BPL

Ein Thema von Christoph Schneider · begonnen am 6. Jan 2016 · letzter Beitrag vom 7. Jan 2016
Antwort Antwort
Benutzerbild von Christoph Schneider
Christoph Schneider

Registriert seit: 7. Okt 2008
Ort: CH-Baar
54 Beiträge
 
Delphi 11 Alexandria
 
#1

Resourcen aus statisch eingebunder BPL

  Alt 6. Jan 2016, 16:15
Delphi-Version: 10 Seattle
Nachdem wir unsere VCL-Skinning Lösung in ein eigenes Package auslagert haben, kriegen wir ein Problem mit der Skinning-Resource, welche im Code eingebunden ist und nicht als separates File ausgeliefert wird.

In der BPL haben wir das nötige VCLStyle.vsf File als Resource des Typs "VCLSTYLE" im Resourcen-Editor ins Package eingebunden.
Neben dieser Resource enthält das Package noch einige Funktionen für das Laden des VCL-Styles während dem Programstart.

Mein Problem ist jetzt, dass die Resource der statisch eingebundenen BPL nicht ins Exe gelinkt wird - vermutlich weil keine statische Referenz auf die Resource existiert und der Linker hier optimiert. Die Lösung mit dem Package läuft akutell nur, wenn ich die VCL-Style-Resource nochmals "manuell" ins Exe einbinde, was natürlich nicht im Sinne des Architekten ist.

Hat jemand Erfahrungen rsp. mehr Informationen zu Resourcen aus BPL's, wobei die Problematik eben diesen speziellen Resourcentyp "VCLSTYLE" betrifft?
Christoph Schneider

Geändert von Christoph Schneider ( 6. Jan 2016 um 18:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Resourcen aus statisch eingebunder BPL

  Alt 6. Jan 2016, 17:15
Die RC in das Projekt eures Packages aufnehmen (einfach die RC in die Projektverwaltung ziehen)

oder in eine Unit der BPL manuell über {$R 'x.res'} oder {$RESSOURCE 'x.res'} , bzw. {$R 'x.res' 'x.rc'} oder {$RESSOURCE 'x.res' 'x.rc'} einbinden.
(das wurde z.B. damals mit dem XP-Manifest so gemacht ... die TXPManifest war nur dafür da, damit Dummi die Unit automatisch ins Uses bekommt)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Christoph Schneider
Christoph Schneider

Registriert seit: 7. Okt 2008
Ort: CH-Baar
54 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Resourcen aus statisch eingebunder BPL

  Alt 6. Jan 2016, 18:25
Danke Dir für den Tipp! Das funktioniert so.

Ich musste nur noch einiges studieren bis ich Deinen Tip auch richtig verstand und korrekt umsetzen konnte, darum versuche ich es hier nochmals zu erklären.

Mein Problem war ja eigentlich nicht, dass ich die Resource nicht ins Package geladen kriegte.
Wir machten dies zwar nicht mehr explizit über {$R 'File.res'} sondern mit der neuen impliziten Methode via Menu "Project/Resources and Images".
Dahinter steckt dann aber auch ein RC-File das als kompiliertes RES eingebunden wird. Die Resource war aber auch vorher bereits in der BPL drin. Dies konnte ich mit dem XN-Resource-Editor zeigen.

Der Trick ist aber, genau darauf zu achten, wo die {$R 'File.res'} Zeile steht. In der DPK-Datei brachte diese Anweisung nocht nicht die Lösung.

Steht die Zeile aber in jener Unit, welche auch meine Klasse enthält, die das Stylesheet lädt, dann wird im Program diese Unit wiederum referenziert, wenn ich dieses Package anwende.
Dabei kommt es nicht darauf an, ob {$R 'File.res'} im Interface- oder Implementationsteil steht.
Beim Kompilieren des Exe sucht Delphi dann aber auch erneut nach dieser Res-Datei und verwendet nicht die Resource aus der BPL. Darum muss diese Res-Datei dann zwingend auch ins zentrale Library-Verzeichnis, was ich bei der Package-Installation noch berücksichtigen musste.

Die gefundene Lösung entspricht zwar nicht meiner ursprünglichen Vorstellung, dass diese Resource direkt aus der BPL ins Projekt gelangen soll.
Nur wenn kümmerts, solange ich die Packages sauber in verschiedene Verzeichnisse halten kann und so die Bausteine schön enkoppelt habe, ist die Architektur-Vorgabe wiederum erfüllt .
Christoph Schneider
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Resourcen aus statisch eingebunder BPL

  Alt 7. Jan 2016, 08:32
Beim Compilieren gegen den Inhalt der BPL brauchst du doch auch die DCP, DCU und DFMs?
Also so gesehn ist das mit der RES/RC auch kein Beinbruch und eigentlich normal.

Der Compiler/Linker kann halt nur aus dem "Original" den neuen Code erstellen/zusammen bauen und nicht aus dem zusammengemanschten Ergebnis in der BPL.
Gut, Ressourcen lassen sich zwar problemlos und verlustfrei wieder extrahieren, aber mit dem sonstigen Code ist das so nicht möglich.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 7. Jan 2016 um 09:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Christoph Schneider
Christoph Schneider

Registriert seit: 7. Okt 2008
Ort: CH-Baar
54 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Resourcen aus statisch eingebunder BPL

  Alt 7. Jan 2016, 09:05
Du hast natürlich Recht.

Ich ging hier von einer falschen Erwartung aus, dass beim Linken der BPL Inhalt verwendet wird und nur beim Debugger die Dcu gelesen werden.
Danke Dir für die Klärung.
Christoph Schneider
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 22:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz