AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VCL von Prog und DLL verbinden.

Offene Frage von "schu-r"
Ein Thema von schu-r · begonnen am 4. Jul 2006 · letzter Beitrag vom 4. Jul 2006
Antwort Antwort
schu-r

Registriert seit: 3. Jul 2006
7 Beiträge
 
#1

VCL von Prog und DLL verbinden.

  Alt 4. Jul 2006, 08:59
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!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: VCL von Prog und DLL verbinden.

  Alt 4. Jul 2006, 09:05
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, ....)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
schu-r

Registriert seit: 3. Jul 2006
7 Beiträge
 
#3

Re: VCL von Prog und DLL verbinden.

  Alt 4. Jul 2006, 09:08
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)
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: VCL von Prog und DLL verbinden.

  Alt 4. Jul 2006, 09:18
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:
funtion CreateButton: TButton;
begin
  Result := TButton.Create(nil);
end;
Wenn Du dann nur mit den so erzeugten Controls arbeitest, müsste IMHO die VCL des Hauptprogramms verwendet werden.
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
  Mit Zitat antworten Zitat
schu-r

Registriert seit: 3. Jul 2006
7 Beiträge
 
#5

Re: VCL von Prog und DLL verbinden.

  Alt 4. Jul 2006, 09:26
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?
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: VCL von Prog und DLL verbinden.

  Alt 4. Jul 2006, 10:27
Hallo,
Zitat von schu-r:
Doch wie könnte ich aus der DLL ein Event im Hauptprogramm genereieren, der es auffordert ein Objekt zu erzeugen und mir zu geben?
Ist doch ganz einfach. Du übergibst der DLL die Prozeduradresse und die DLL ruft dann die Prozedur auf.
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:
type
  IVCLFactory = interface(IInterface)
    function GetButton: TButton;
    function GetLabel: TLabel;
  ...
  end;
Im Hauptprogramm:
Delphi-Quellcode:
type
  TVCLFactory = class(TInterfacedObject, IVCLFactory)
    function GetButton: TButton;
    function GetLabel: TLabel;
  ...
  end;
Beim Laden der DLL übergibst Du dann einfach das Interface:
Delphi-Quellcode:
var
  Factory: IVCLFactory;
begin
  Factory := TVCLFactory.Create;
  // DLL laden
  InitDLL(Factory); // <- hier eine exportierte Funktion aufrufen, der das Interface übergeben wird
end;
So würde ich das machen. Nicht vergessen, am Schluss in der DLL das Interface freizugeben (nil zuweisen).

Gruß
xaromz
  Mit Zitat antworten Zitat
schu-r

Registriert seit: 3. Jul 2006
7 Beiträge
 
#7

Re: VCL von Prog und DLL verbinden.

  Alt 4. Jul 2006, 11:53
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:39 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