AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Frame aus Package laden (ohne Runtime-Packages)

Frame aus Package laden (ohne Runtime-Packages)

Ein Thema von hoika · begonnen am 10. Feb 2011 · letzter Beitrag vom 9. Feb 2017
 
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Frame aus Package laden (ohne Runtime-Packages)

  Alt 22. Dez 2016, 12:29
Hallo,

auch, wenn der Thread schon etwas älter ist: Geht das wirklich nicht? Ich möchte Packages (BPL) dynamisch von meiner Hauptanwendung laden. Es soll damit möglich sein auch später noch neue Packages zu entwickeln, ohne die Hauptanwendung nochmal zu übersetzen. Die Packages sollen dabei Frames bereitstellen, welche in der Hauptanwendung angezeigt werden.

1. Ansatz

Quellen:
http://www.delphipraxis.net/171762-h...-packages.html
http://www.delphipraxis.net/63743-fo...sch-laden.html
http://stackoverflow.com/questions/3...to-application
http://edn.embarcadero.com/article/27178

Folgendes im Package:
Delphi-Quellcode:
initialization
  RegisterClass(TMyFrame);
finalization
  UnRegisterClass(TMyFrame);
Funktioniert leider nicht, da die Packages hier leider bereits beim Compilieren der Hauptanwendung bekannt sein müssen. Ansonsten erhalte ich, wie in vielen Threads angemerkt, "nil", wenn ich mit GetClass/FindClass nach der Klasse suche.

2. Ansatz

Erstellen von Funktionen im Package, welche per export bereitgestellt werden.

Leider erhalte ich dann, wie hier im ersten Post geschrieben, den Fehler "TFont kann nicht TFont zugeweisen werden".

Mein bisheriger Versuch:

Package:
Code:
exports
  CreateFrame;

function CreateFrame(AOwner: TComponent; AParent: TWinControl; AHandle: HWnd): TFrame;
begin
  Application.Handle := AHandle;
  Result := TFrameBPL.Create(AOwner);
  Result.Parent := AParent;
  Result.Align := alClient;
end;
Hauptanwendung:
Delphi-Quellcode:
procedure TMain.LoadBPL(AFileName: string);
type
  TCreateFrame = function(AOwner: TComponent; AParent: TWinControl; AHandle: HWnd): TFrame;
var
  CreateFrame: TCreateFrame;
  BPLFrame: TFrame;
begin
  FPackageModule := LoadPackage(AFileName);
  if FPackageModule <> 0 then
  begin
    @CreateFrame := GetProcAddress(FPackageModule, 'CreateFrame');
    if Assigned(CreateFrame) then
      BPLFrame := CreateFrame(sb, sb, Application.Handle); //sb ist eine TScrollBox
  end;
end;
Was mache ich falsch, bzw. wie sollte man es richtig machen?

Grüße
Headbucket

Geändert von Headbucket (22. Dez 2016 um 12:37 Uhr) Grund: Kommentar hinzugefügt
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:58 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