Runtime-Packages



  • Hallo,

    eigentlich dachte ich bisher immer, dass ich das mit den Runtime-Packages verstanden habe. Heute habe ich erfahren müssen, dass das alles so irgendwie nicht stimmt...

    Ich habe eine bestehende Anwendung nach 64-bit portiert. Unsere Datenbank-Engine (DBISAM) lässt sich hier allerdings nur mit einem Runtime-Package erzeugen.

    Ich habe also in den Projektoptionen (C++Builder XE6) unter "Laufzeit-Packages" das Häkchen "Mit Laufzeit-Packages linken" aktiviert und in dem Feld darüber bei "Laufzeit-Package-Importbibliotheken" den Namen des Runtime-Packages (dbisamr) eingetragen.

    Das Projekt lässt sich auch compilieren. Allerdings benötigt es nun zum Ausführen ständig die vcl200.bpl, die rtl200.bpl etc.
    Eigentlich hatte ich erwartet, dass alle benötigten Packages mit in die EXE gelinkt werden, mit Ausnahme des "dbisamr"-Packages.

    Funktioniert allerdings nicht. Was mache ich falsch und wie erreiche ich, dass nur dieses eine Package zur Laufzeit geladen wird und alle anderen benötigten Packages direkt mit in die EXE gelinkt werden?

    Viele Grüße und Besten Dank im Voraus für eure Antworten
    Robert



  • rowisoft schrieb:

    Ich habe also in den Projektoptionen (C++Builder XE6) unter "Laufzeit-Packages" das Häkchen "Mit Laufzeit-Packages linken" aktiviert und in dem Feld darüber bei "Laufzeit-Package-Importbibliotheken" den Namen des Runtime-Packages (dbisamr) eingetragen.

    Das Projekt lässt sich auch compilieren. Allerdings benötigt es nun zum Ausführen ständig die vcl200.bpl, die rtl200.bpl etc.
    Eigentlich hatte ich erwartet, dass alle benötigten Packages mit in die EXE gelinkt werden, mit Ausnahme des "dbisamr"-Packages.

    Dein dbisamr -Package ist ja eine fertig kompilierte DLL (weil Packages auch nur spezielle DLLs sind), und als solche hat sie eben Abhängigkeiten von anderen DLLs wie rtl*.bpl , vcl*.bpl etc. (kannst du mit dem Dependency Walker nachsehen). D.h., wenn deine Anwendung dbisamr als Laufzeit-Package benutzen will, muß sie auch dessen Abhängigkeiten als Laufzeit-Package laden.

    (Vermutlich ist der Linker schlau genug, daß er abhängige Packages implizit zu deiner Liste hinzufügt. Wenn nicht, dann gäbe es zwei Instanzen von RTL und VCL in deiner Anwendung, dann bekommst du die lustigsten Probleme.)



  • Laufzeit-Packages also BPLs sind gegen dei dynamische RTL gelinkt.

    Projekte die Laufzeitpackages nutzen sollten auch gegen die dynamische RTL gelinkt werden. Das kann sonst zu seltsamen Effekten führen, da die RTL sonst quasi 2 mal vorhanden ist - einmal statisch gelinkt in Deiner Exe und dynaqmisch in der rtl.bpl.


Anmelden zum Antworten