Zitat von
MasterDG:
Kann ich also mit der
PE nach der Lizenz von Borland meine Progs als Freeware vertreiben, die Komponenten benutzten bei denen ich diese Fake-XMLRTL benutzt habe?
Dummerweise enthält die gefakte xmlrtl.dcp Datei keinen ausführbaren Code. Somit kannst du kein Programm schreiben, dass die Funktionalität der xmlrtl (XmlDom, XmlDoc, XmlIntf, XmlSchema, ...) benutzt, weil diese nicht verfügbar ist (du erntest im Falle einer Nutzung nur eine MessageBox, die dir sagt, dass du die xmlrtl nicht benutzen darfst).
Um es nochmal klar darzustellen (es soll ja Leute geben, die nicht wissen was eine .dcp und was eine .bpl so macht).
Programm mit externen Packages:
Wenn man ein Programm kompiliert, schaut der Compiler in den .dcp Dateien der benötigten Packages nach, welche Units sie enthalten und wie deren Interface-Abschnitte aussehen. Diese Information benutzt er nun, um das Programm gegen die .bpl Dateien zu binden (linken). Danach ist die .dcp Datei für das kompilierte Programm wertlos, weil sie nicht benötigt wird.
Programm ohne externen Packages:
Wenn man ein Programm kompiliert, schaut der Compiler in den .dcp Dateien nach, welche Units sie enthalten und wie deren Interface-Abschnitte aussehen. Danach läd er die in den .dcp Dateien "eingeschweisten" vorkompilierten Units und baut sie in das Programm ein. Die .bpl Datei ist hierbei für das Programm belanglos.
Nun zum xmlrtl Problem mit Delphi 2005 PE
Das
Package designide, welches für die Property-Editoren zuständig ist, benötigt von sich aus das
Package xmlrtl (irgendwas wird da eben mit
XML-Bäumen verarbeitet). Kompiliert man nun ein designtime-
Package, welches das designide benötigt (requires), so schaut der Compiler in der designide.dcp nach, welche Units enthalten sind und vor allem er schaut auch nach, welche "requires" Packages die designide besitzt. Deren .dcp Dateien werden dann ebenfalls angeschaut. Und genau hier tritt der Fehler auf. Es existiert keine xmlrtl.dcp Datei.
Dieser Fehler tritt nur bei Packages auf, da es ohnehin nicht erlaubt ist, die designtime Packages von Delphi in einem Programm zu verwenden (Lizenz: redistributable files).
Der Fehler tritt nur beim Kompilieren von designtime Packages auf. Bekommt man schon kompiliere designtime Packages, dann besteht kein Problem, weil die xmlrtl.dcp nur beim kompilieren gegen das designide
Package von Bedeutung ist.
Die gefakte xmlrtl.dcp Datei macht nun nichts anderes, als die beiden Pseudo-Units xmlintf.pas und xmldom.pas zu beinhalten, wobei diese aber einige Interfaces (IXmlNode = interface, ...) der original Units enthalten müssen, weil designide diese einsetzt. Interfaces haben aber keinen Code, womit der Implementation Abschnitt, bis auf die MessageBox mit darauf folgendem Halt(0), leer ist. Dem Compiler reicht diese xmlrtl.dcp um das designtime Packages, welches gar nicht direkt mit dem xmlrtl
Package zu tun hat, zu kompilieren.
Der Fehler dürfte sich bei Delphi 2005
PE deswegen eingeschlichen haben, weil die
PE kein
XML von Haus aus unterstützen soll. Also was liegt näher als die xmlrtl.dcp zu entfernen, weil die ja zum Kompilieren gegen die xmlrtl.bpl notwendig ist. Die xmlrtl.bpl wird von der
IDE selbst benutzt und ist somit auch in der
PE enthalten. Es wurde aber vergessen, dass das designide
Package auf der xmlrtl aufbaut und somit die xmlrtl.dcp benötigt.
Ich hoffe, dass diese Erklärung des Problems under Lösung mal ausreicht.