AGB  ·  Datenschutz  ·  Impressum  







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

Eigenentwickeltes Control in DLL verpacken?

Ein Thema von skoschke · begonnen am 14. Jan 2019 · letzter Beitrag vom 16. Jan 2019
Antwort Antwort
Seite 1 von 3  1 23      
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#1

Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 05:47
Hallo,

ich spiele mit dem Gedanken, ein eigenes Control in eine DLL zu verpacken und es zur Laufzeit aus der DLL zu laden und auf ein Form zu platzieren.

Hintergrund:
Es wird mit D10.1 entwickelt, andere Verwender haben XE6/7 und ein ständiges Neukompilieren bei Erweiterungen macht Probleme.
Weiterhin könnte man später beim Anwender des Programms bei Erweiterungen nicht die gesamte Anwendung, sondern nur die DLL austauschen...

Ist das überhaupt machbar (und wenn ja wie) oder eine Schnapsidee?

Ciao
Stefan
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 08:49
Da gibt es viele Seiten:
  1. Mit einer DLL bindest Du den Code, der sonst auf zig Platformen laufen könnte, erstmal auf eine fest (bzw musst binaries für viele Platformen erstellen) - wenn Du mehrere Platformen überhaupt unterstützen möchtest.
  2. Unter Windows gibt es dafür ActiveX. ActiveX-Controls lassen sich auch in Delphi erstellen. Aber dann halt ganz gebunden an diese Platform (ob das auch mit FMX oder nur mit VCL klappt, weiß ich nicht).
  3. Die DLL würde erstmal eine eigene Version der VCL einkompiliert haben, da gibt es etliche Fallstricke (etwa kein gültiges Application-Objekt).
  4. Lokalisierungs-Code würde solche Controls nicht automatisch behandeln können.

Bevor ich so einen Aufwand überlegen würde, würde ich mir vermutlich erst einmal lange Gedanken machen, ob ich mein Konzept nicht so verbessern könnte, dass ständiges Neukompilieren eben keine Probleme macht. Denn ob es nun Änderungen an der Pascal-Schnittstelle oder an der DLL-Schnittstelle sind - in beiden Fällen ist eine stabile saubere Schnittstelle das A und O.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 09:02
Vor allem ist ein Kompilieren bei den Verwendern ja gar nicht nötig. Es würde ja auch reichen Binaries auszutauschen, wenn dort nichts am Quelltext geändert werden soll.

Wir machen das alles per Batchdatei. Ein Doppelklick und alle Einstellungen und Pfade sind gesetzt, dann noch per Batch die Packages kompilieren, fertig.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 09:17
Ich möchte noch einen Schritt zurückgehen und fragen, ob es sich wirklich um eine visuelle Komponente handelt.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 12:22
Es ist nicht unmöglich, aber es gibt viele Fallstricke, besonders, wenn es sich um eine visuelle Komponente handelt. Viel hängt auch davon ab, wie das Hostprogramm die Komponente verwendet. Falls das Hostprogramm die Klasse der Komponente kennen muss, um mit ihr zu arbeiten (d.h. Du kannst sie nicht als Instanz der VCL-Basisklasse behandeln, von der sie abgeleitet wurde) hast Du ja zwei unterschiedlich kompilierte Versionen des Sourcecodes, die im Host-Programm eingebundene und die aus der DLL. Ein Aufruf einer statischen Methode im Hostprogramm würde den Code im Hostprogramm aufrufen, eine virtuelle Method dagegen den in der DLL. Und bei größeren Sprüngen in den verwendeten Delphi-Versionen kann das in-memory layout der von der DLL erzeugten Instanz sogar von dem abweichen, was das Hostprogramm erwartet.

Das Ganze ist ein Minenfeld, in das ich mich nicht vorwagen würde .

Was so halbwegs funktioniert ist folgendes: Du definierst einen Interface-Type für die Interaktion mit der Komponente in einer separaten Unit, die sowohl von Hostprogramm als auch von der DLL verwendet wird. Die DLL exportiert eine Funktion, die eine Instanz der Komponente anlegt und das Interface dafür zurückgibt. Falls es eine visuelle Komponente ist übergibst Du der Funktion das Windows-Handle des Host-Controls und verwendest den CreateParented-Constructor um das Control (muss ein TWinControl sein!) zu erzeugen. Alle Interaktion des Hosts mit dem Control erfolgt über das Interface, oder durch Senden von Messages. Dadurch ist sichergestellt, dass es keine Konflikte durch unterschiedlichen Code in VCL oder RTL gibt. Trotzdem sollte man bei den Parametern in den Methoden des Interfaces auf compiler-managed types wie String oder array of <type> verzichten, den sonst brauchen beide Module auch noch einen gemeinsamen Memory manager, was auch nicht problemfrei machbar ist, wenn beide mit unterschiedlichen Delphi-Versionen kompiliert wurden.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 13:21
Falls es etwas visuelles ist, welches dann dynamisch auf ein Formular soll, dann hast Du noch das Problem, dass DLL und exe unterschiedliche instanzen der VCL haben, da kommen dann Fehler wie "Kann TFont nicht TFont zuweisen". Um visuelle Sachen aus einer DLL zu nutzen, kompiliert man meist exe und DLL mit runtime packages
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 14:09
Ohje...

Minenfeld, ich mag nicht

Das Problem ist eigentlich, dass ich eine Komponente mit Berlin 10.1 entwickle, welche von anderen Programmieren der Firma (die XE7 haben) dann im fertigen Programm weiterverwendet wird und bei denen dann ja der Komponentencode wieder erneut kompiliert wird...

Weil es da immer mal wieder zu Problemen kommt und wir nicht bei jeder kleinen Änderung die gesamte Anwendung austauschen können, dachte ich an die DLL-Variante...

Es geht ausschließlich um Win32 Anwendungen.

Wie könnte man alternativ vorgehen?

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 14:14
Wie könnte man alternativ vorgehen?
Die Komponente in XE7 und Berlin entwickeln, und nicht als Quellcode weitergeben sondern als (wie heissen binary Komponenten?), vielleicht?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 14:15
Weil es da immer mal wieder zu Problemen kommt
welche Probleme denn?

die einfachsten Varianten:
Komponente auch in XE7 implementieren oder die Anwendung auf 10.1 umstellen oder in 10.1 nur solche Sprachfeatures verwenden, die auch in XE7 kompilieren.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Eigenentwickeltes Control in DLL verpacken?

  Alt 14. Jan 2019, 14:36
wie heissen binary Komponenten?)
Es wird statt pas-Dateien die dcu-Dateien geliefert.
Aber es wird viele User geben die das nicht mitmachen werden und nur-dcu-Komponenten nicht kaufen/installieren werden.
Bei uns ist sowas auch ein Ausschlußkriterium.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 00:31 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