![]() |
BPL-Projekt läßt sich nicht per LoadPackage('packed.bpl'); laden
Ä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:
Änderung (Code hinzugefügt (EXE-Projekt:
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.
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:
der Fehler vom System: "Das angegebene Modul konnte nicht gefunden werden".
var
h: HMODULE; begin h := LoadPackage('E:\Pfad\package.bpl'); if h = 0 then ShowError; end; 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 :-) |
AW: BPL-Projekt läßt sich nicht per LoadPackage('packed.bpl'); laden
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:
Zitat:
* 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-Quellcode:
.
SysErrorMessage(GetLastError)
PSS: ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz