AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein BPL-Projekt läßt sich nicht per LoadPackage('packed.bpl'); laden
Thema durchsuchen
Ansicht
Themen-Optionen

BPL-Projekt läßt sich nicht per LoadPackage('packed.bpl'); laden

Ein Thema von paule32.jk · begonnen am 23. Aug 2023 · letzter Beitrag vom 24. Aug 2023
Antwort Antwort
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#1

BPL-Projekt läßt sich nicht per LoadPackage('packed.bpl'); laden

  Alt 23. Aug 2023, 14:45
Änderung (Code hinzugefügt (BPL-Projekt:
Code:
unit Interfaces;
interface

type
  PointerByte = ^Byte;

type
  IRF_Package = interface(IInterface)
    ['{19790208-2023-0802-0002-CAFEBABE0002}']
    function DeCompressBuffer(str: String; len: Integer): Boolean;
    function DeCompressAll: Boolean;
  end;

implementation
end.
Code:
unit ResourceFiles;
interface
uses
  Windows, Classes, SysUtils, Dialogs, Interfaces,
  JvComponentBase, JvZlibMultiple,
  ...

type
  TRF_Package = class(TInterfacedObject, IRF_Package)
  public
    function DeCompressBuffer(str: String; len: Integer): Boolean;
    function DeCompressAll: Boolean;

    constructor Create; overload;
    destructor Destroy; override;
  end;

implementation

constructor TRF_Package.Create;
begin
  inherited Create;
end;

destructor TRF_Package.Destroy;
begin
  inherited Destroy;
end;
...
end.
Änderung (Code hinzugefügt (EXE-Projekt:
Code:
  procedure PrepareBitmapPackage;
  var
    MyPackage : IRF_Package;
    MyGUID   : TGUID;
    H        : HMODULE;
  begin
    H := 0;
    try
      try
        H := LoadPackage(PChar(ExtractFilePath(
        Application.ExeName) + 'ResPackage.bpl'));
        if H = 0 then
        begin
          raise Exception.Create(
          #10 + 'Can not load package: ResPackage.bpl' +
          #10 + 'aborted.');
        end;

        MyGUID := StringToGUID(
        '{19790208-2023-0802-0002-CAFEBABE0002}');
        MyPackage := CreateComObject( MyGUID ) as IRF_Package;

        if not Assigned(MyPackage) then
        begin
          raise Exception.Create(
          'can not access Interface: IRF_Package');
        end;

        if not(MyPackage.DeCompressAll) then
        begin
          raise Exception.Create(
          'ResPackage.bpl error.');
        end;
      except
        on E: Exception do
        begin
          ShowMessage('Exception:' +
          #10 + E.CLassName +
          #10 + E.Message );
          Close;
        end;
      end;
    finally
      UnloadPackage(H);
    end;
  end;

Hallo,

nun habe ich erfolgreich ein BPL-Projekt geschrieben.
Der Compiler hat automatisch dependcies (requeires Abschnitt) hinzugefügt und ohne Fehler
oder sonstigen Meldungen compiliert.

Auch das installieren in das IDE System war erfolgreich (Instal packages...).
Ich kann in diesen Dialog weitere Packages sehen, die unterschiedliche Komponenten zur Verfügung stellen.

Zu jeden Eintrag steht in grau der Pfad.
Für meine BPL-Datei habe ich diesen Pfad kopiert, und unter einer Anwendung im Kontext:
"LoadPackage" verwenden wollen.

Der Compiler mekkert auch hier nicht, und erstellt ein .exe Image.

Wenn ich nun das Image starte, kommt dann der Fehler bei diesen Code:
Code:
var
  h: HMODULE;
begin
h := LoadPackage('E:\Pfad\package.bpl');
if h = 0 then ShowError;
end;
der Fehler vom System: "Das angegebene Modul konnte nicht gefunden werden".

Dann habe ich in das Image geschaut und die Einträge: rtl70.bpl, und vcl70.bpl
gefunden.

Unter den Optionen ist das Häckchen (wo man Mit/Ohne Runtime Packages compilieren kann)
ausgegraut (kein Häckchen zu sehen).

Danach habe ich nach diesen zwei Dateien gesucht.
Aber ich konnte die im Installationsverzeichnis von Delphi nicht finden.
Unter C:\windows\system32 habe ich auch nichts gefunden.

Anwendungen lassen sich aber erstellen und ausführen (was recht komisch ist, da ja auch
Programme/Anwendungen rtl70.bpl und vcl70.bpl benötigen.

Von daher: kann mir einer einen Tipp geben, wo ich diese Dateien finden kann ?

Für sachdienliche Hinweise bin ich sehr dankbar.

Gruß, der paule (jaja, er war Bademeister
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet

Geändert von paule32.jk (23. Aug 2023 um 16:19 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: BPL-Projekt läßt sich nicht per LoadPackage('packed.bpl'); laden

  Alt 24. Aug 2023, 14:56
Warum ein Package und nicht DLL?

Und dein Projekt (EXE) ist ebenfalls mit Laufzeit-Packages kompiliert?
Mindestens die RTL, welche auch in deinem Package als Require drin sein sollte.

Ansonsten weiß ich nicht, wie das mit SharedMem bei Packages aussieht/funktioniert,
gegenüber der notwendigkeit bei DLLs, welche sich durch die Nutzung des "String" ergibt.
(alles nicht nötig, wenn gegen die rtl*.bpl kompiliert wurde)

Zitat:
automatisch dependcies
rtl.dcp ?

Zitat:
installieren in das IDE System
Ist das Überhaupt nötig?

* DesignTimePackages -> Funktionen/Komponenten/..., welche innerhalb der IDE benutzt werden, sowie z.B. als Komponente im FormDesigner drauf sollen.
* RuntimePackages -> Funktionen welche in eigenen Programmen genutzt werden
* oder Beides zusammen


Ja, Delphi 7 hat noch mit Vielem das System zugemüllt, und z.B. seine eigenen DesignTime-/Runtime-Packages in System32 geworfen.
Etwas neuere Delphis lassen den Müll im eigenen Verzeichnis und bieten dir auch ein "Redist" Verzeichnis, wo die Packages drin liegen, welche du (tweilweise) mit deinem Programm ausliefern muß, wenn du mit Laufzeitpackages kompiliert hast.
C:\Program Files (x86)\Embarcadero\Studio\22.0\Redist\win32 (k.A. ob Delphi 7 auch ein "Redist"-Verzeichnis hatte, oder man es sich selbst aus System32 raussuchen muß)
eben jene schon genannte rtp70.bpl mußt du deinem Programm mitgeben.

PS:
Originale Fehlermeldungen blind durch igendeinen festen Text zu ersetzen, ist nie eine gute Idee.
Delphi-Referenz durchsuchenRaiseLastOSError oder, als zusatz zu deinem Text zumindestens SysErrorMessage(GetLastError) .

PSS:
https://www.delphipraxis.net/207151-...s-sandbox.html
https://www.embarcadero.com/de/products/delphi/starter
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (24. Aug 2023 um 15:13 Uhr)
  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 18:05 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