![]() |
VCL von Prog und DLL verbinden.
Hallo !
Habe ein Programm und eine DLL beide werden ohne Laufzeitpackages erstellt. Problem: Beide instanzieren selbständig eine VCL. Ist es irgendwie möglich dem DLL zu sagen, dass er die VCL des Hauptprogramms verwenden soll? Wenn ich die vcl als Laufzeitpackage angebe, dann funkt es, aber das ist für uns keine gute lösung. Kann mit der DLL Objekte und Formen austauschen nur Steuerelement die im Dll erzeugt wurden werden in einer Form des Hauptprogrammes nicht angezeigt. Dll wird dynamisch geladen. D7 Danke! |
Re: VCL von Prog und DLL verbinden.
Die Lösung um die VCL von Exe und DLL zu "verbinden" sind Laufzeitpackages. Es gibt für das "Verbinden" keine andere Lösung.
Was du machen kannst ist zu versuchen mit Win32-API-Mitteln die Steuerelemente/Panels von der DLL in die Exe zu bekommen. Ein objektorientiertes einfügen mit Hilfe der VCL ist nicht möglich bzw. mit sehr viel Problemen verbunden (gleiche Compilerversion, keine Is/As-Abfragen sondern harte Casts, ....) |
Re: VCL von Prog und DLL verbinden.
Würde mir reichen. Habe immer den gleichen Compiler. Soll ja nur für internes customizing unserer Produkte sein.
Wir liefern das Programm einmal mit der mal mit einer anderen DLL aus. (keine frei zugängliche Schnittstelle) |
Re: VCL von Prog und DLL verbinden.
Hallo,
wenn es darum geht, nur ein paar Controls zu verwenden, dann kannst Du im Hauptprogramm Funktionen bereitstellen, die Dir diese Controls erstellen. Quasi eine VCL-Factory. Etwa so:
Delphi-Quellcode:
Wenn Du dann nur mit den so erzeugten Controls arbeitest, müsste IMHO die VCL des Hauptprogramms verwendet werden.
funtion CreateButton: TButton;
begin Result := TButton.Create(nil); end; Das ist aber nur praktikabel, solange Du nur wenige Controls benötigst und wenn Du keine Casts benötigst. Da ich das nicht getestet, sondern nur wild rumgeraten habe, solltest Du das vorher mal ausprobieren. Gruß xaromz |
Re: VCL von Prog und DLL verbinden.
Diese Möglichkeit steht mir immer noch als alternative zur verfügung.
Im Hauptprogramm alles Grafische mit Daten aus dem DLL erstellen und auf Events im DLL reagieren. Doch wie könnte ich aus der DLL ein Event im Hauptprogramm genereieren, der es auffordert ein Objekt zu erzeugen und mir zu geben? |
Re: VCL von Prog und DLL verbinden.
Hallo,
Zitat:
Besser wäre es aber, Du erstellst eine Klasse, die alle möglichen Objekte erzeugen kann, und übergibst das als Interface an die DLL. z. B. so: Interface-Unit (in Hauptprogramm und DLL verwenden):
Delphi-Quellcode:
Im Hauptprogramm:
type
IVCLFactory = interface(IInterface) function GetButton: TButton; function GetLabel: TLabel; ... end;
Delphi-Quellcode:
Beim Laden der DLL übergibst Du dann einfach das Interface:
type
TVCLFactory = class(TInterfacedObject, IVCLFactory) function GetButton: TButton; function GetLabel: TLabel; ... end;
Delphi-Quellcode:
So würde ich das machen. Nicht vergessen, am Schluss in der DLL das Interface freizugeben (nil zuweisen).
var
Factory: IVCLFactory; begin Factory := TVCLFactory.Create; // DLL laden InitDLL(Factory); // <- hier eine exportierte Funktion aufrufen, der das Interface übergeben wird end; Gruß xaromz |
Re: VCL von Prog und DLL verbinden.
Hab gerade sowas in der Art gebastelt.
Lieber aber währ mir die Möglichkeit einen TFrame im Plugin zu Zeichnen und in der Form (hauptprogramm) darzustellen. Da funkt mir aber die VCL dazwischen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 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