Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form aus BPL dynamisch laden (https://www.delphipraxis.net/63743-form-aus-bpl-dynamisch-laden.html)

hanspeter 22. Feb 2006 13:14


Form aus BPL dynamisch laden
 
Hallo,

in einer dynamisch zu ladenden Form
befindet sich folgende Anweisung :

Delphi-Quellcode:
initialization
  RegisterClass(TForm2);
finalization
  UnRegisterClass(TForm2);
Der Aufruf erfolgt mit

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  PackageModule: HModule;
  AClass: TPersistentClass;
begin
  PackageModule := LoadPackage('Package1.bpl');
  Application.ProcessMessages;
  begin
    AClass := GetClass('TForm2');

    if AClass <> nil then
      with TComponentClass(AClass).Create(Application)
        as TCustomForm do
      begin
        ShowModal;
        Free;
      end;

    UnloadPackage(PackageModule);
  end;
end;
Bei der Anweisung AClass := GetClass('TForm2'); ist AClass nil.

Binde ich die Form statisch ein, dann funktioniert die Anweisung.

Es handelt sich um ein Beispielprojekt von der Borland BDS Seite.

Dynamic Packages
A white paper by Vino Rodrigues,
vinorodrigues@yahoo.com

Copyright (C) 2001 Vino Rodrigues

Sourcecode to example 2

Hat wer einen Tip, was hier beim dynamischen verwenden einer Form schief läuft?

Gruß
Peter

hanspeter 23. Feb 2006 06:40

Re: Form aus BPL dynamisch laden
 
Ich hatte bereits in der vergangenen Woche zu diesem Thema gefragt und keine
Antwort erhalten.

Da ein Beispiel aus einem Borland Tutorial auch nicht funktioniert, gehe ich inzwischen
davon aus, dass es sich um einen Bug in D2006 handelt.

Gruß Peter

mirage228 23. Feb 2006 14:30

Re: Form aus BPL dynamisch laden
 
Hi,

Hast du mal probiert Delphi-Referenz durchsuchenInitialisePackage noch mal manuell zusätzlich aufzurufen?

mfG
mirage228

hanspeter 23. Feb 2006 15:10

Re: Form aus BPL dynamisch laden
 
Zitat:

Zitat von mirage228
Hi,

Hast du mal probiert Delphi-Referenz durchsuchenInitialisePackage noch mal manuell zusätzlich aufzurufen?

mfG
mirage228

Das noch nicht, aber wenn ich das ganze mit dem Debugger schrittweise abarbeite, dann geht er über den
Initialisationsteil durch. RegisterClass wird abgearbeitet, aber die Klasse ist danch mit GetClass nicht
zu finden.

Interessanter Weise funktioniert das, wenn ich die Unit statisch einbinde.
Und wie gesagt, das ganze ist ein borland-Beispiel.

Gruß Peter

dfried 23. Feb 2006 15:27

Re: Form aus BPL dynamisch laden
 
Hast du es mal mit FindClass probiert?
Damit hab ich das unter D7 mit Forms aus Packages immer gemacht.

jbg 24. Feb 2006 21:30

Re: Form aus BPL dynamisch laden
 
Dumm gefragt, aber ist das Hauptprogramm auch gegen das rtl/vcl Package kompiliert ("Mit Laufzeitpackages kompilieren")? Denn wenn nicht, dann hast du zwei Klassen-Listen, die nichts von einander wissen.

hanspeter 24. Feb 2006 21:39

Re: Form aus BPL dynamisch laden
 
Zitat:

Zitat von jbg
Dumm gefragt, aber ist das Hauptprogramm auch gegen das rtl/vcl Package kompiliert ("Mit Laufzeitpackages kompilieren")? Denn wenn nicht, dann hast du zwei Klassen-Listen, die nichts von einander wissen.

Weiß ich ehrlich gesagt nicht.
Ich habe einfach das Beispiel von Borland BDS kopiert und ausprobiert.
Ich bin erst am Montag wieder in der firma und kann das prüfen.

Kann mir übrigens wer ein (kostenpflichtiges) Tool empfehlen, was das Update der BPL Hölle einfacher macht.
So etwa in der Form.
Bestimme alle zu updatenden Dateien, stelle dies ins Internet und lege dort zum Download eine Liste an, die
gegen die aktuelle Konfiguration abgeglichen wird. (Autoupdate)

Mit Gruß

Peter

Igotcha 24. Feb 2006 23:00

Re: Form aus BPL dynamisch laden
 
[quote="hanspeter"]
Zitat:

Zitat von jbg
Kann mir übrigens wer ein (kostenpflichtiges) Tool empfehlen, was das Update der BPL Hölle einfacher macht.
So etwa in der Form.
Bestimme alle zu updatenden Dateien, stelle dies ins Internet und lege dort zum Download eine Liste an, die
gegen die aktuelle Konfiguration abgeglichen wird. (Autoupdate)

Ich hab mir für meine Anwendung, die genau so aus BPL-Lösungsmodulen mit Forms etc. aufgebaut ist, einen "Launcher" geschrieben, über den die Anwendung gestartet wird und der genau das abgleicht.

Viele Grüße
Igotcha

alias5000 16. Aug 2006 15:00

Re: Form aus BPL dynamisch laden
 
Auch wenns schon ne Weile her iss, ich habs selbe Problem gehabt.

Das hier muss noch in die Unit der BPL unten hin:

Delphi-Quellcode:
initialization
  RegisterClass({Klassenname});

Helmi 1. Mär 2015 13:11

AW: Form aus BPL dynamisch laden
 
Hallo,

ich entstaube mal diesen Thread (irgendjemand sollte mal im Archiv staubwischen).

Ich habe auch das Problem, dass GetClass immer Nil zurückliefert, obwohl die Klasse
im Package registriert wird.

Hier mal der aktuelle Link zum Beispiel


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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