Einzelnen Beitrag anzeigen

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