AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Units in bpl auslagern und als Package in Exe/Dll einbinden

Units in bpl auslagern und als Package in Exe/Dll einbinden

Ein Thema von hschmid67 · begonnen am 6. Jun 2024 · letzter Beitrag vom 8. Jun 2024
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.492 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: Units in bpl auslagern und als Package in Exe/Dll einbinden

  Alt 7. Jun 2024, 15:51
Nur, um sicherzustellen, dass ich das richtig verstehe: Es geht um ein relativ einfaches Rahmenprogramm, welches Funktionalität mittels verschiedener Plugins als DLL anbietet? Und dieses System existiert so bereits?

Solange da die DLLs sich nicht gegenseitig aufrufen sondern nur ein vorgegebenes (prozedurales?) Interface für das Hauptprogramm zur Verfügung stellen, kann Dein Vorhaben durchaus sinnvoll sein, denn es spart für jede DLL alles das, was in den Standard-Packages zur Verfügung steht. Auch das Hauptprogramm kann dadurch kleiner werden.

Aber ich würde es bei den Standard-Packages für RTL und VCL, plus evtl. von wenigen Fremdkomponenten belassen. Sobald Du anfängst, eigenen Code in Packages zu verlagern, wird es komplex und lohnt in der Regel auch nicht.

Wichtig ist eine feste, dokumentierte Schnittstelle und eine Versionierung der DLLs, aber das sollte es für ein solches Programm bereits sowieso geben, unabhängig davon, ob Packages verwendet werden oder nicht.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.331 Beiträge
 
Delphi 12 Athens
 
#12

AW: Units in bpl auslagern und als Package in Exe/Dll einbinden

  Alt 7. Jun 2024, 18:05
Nja, grundsätzlich spricht nichts dagegen, Packages anstatt DLLs zu verwenden.
Dynamisch laden lassen auch sie sich

MSDN-Library durchsuchenLoadLibrary
MSDN-Library durchsuchenLoadLibraryEx
Delphi-Referenz durchsuchenSafeLoadLibrary
MSDN-Library durchsuchenFreeLibrary

Delphi-Referenz durchsuchenLoadPackage
Delphi-Referenz durchsuchenUnloadPackage

und zusätzlich hat man den Vorteil erstmal ohne ShareMem rumzuspielen und auch stärker gemeinsamten Code, Klassen, usw. verwenden zu können.
OK, "DLLs" aus fremden Programmiersprachen fallen dann außen vor.
Und bei RuntimePackages muß man unbedingt aufpassen, dass die EXE, DLLs und BPLs in der selben Delphi-Version, Unterversion und selten sogar mit dem selben Patch kompiliert sein müssen.

Hier bietet es sich inzwischen an, mit dem automatischen Suffix zu arbeiten. (LibSuffix AUTO, siehe Projektoptionen > Beschreibung)
http://docwiki.embarcadero.com/RADSt...jects_(Delphi)


Alternativ kann man natürlich auch klassisch mit COM-Interfaces arbeiten,
sowie ganz einfache "Funktionen" in DLLs aufrufen,
oder Dergleichen.



Ja, praktisch ist es also auch möglich Erweiterungen in der Delphi-IDE zu nutzen, ohne dass beim (de)installieren die IDE beendet und neu gestartet werden muß.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Jun 2024 um 18:14 Uhr)
  Mit Zitat antworten Zitat
Commander Tom

Registriert seit: 9. Dez 2005
Ort: Ettlingen
64 Beiträge
 
Delphi 12 Athens
 
#13

AW: Units in bpl auslagern und als Package in Exe/Dll einbinden

  Alt 7. Jun 2024, 21:56
TMSSoftware bietet dazu auch etwas an: https://www.tmssoftware.com/site/tms...framework.asp#

Ob das allerdings passend sein könnte, kann ich nicht beurteilen.
Commander Tom
  Mit Zitat antworten Zitat
hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
65 Beiträge
 
Delphi 12 Athens
 
#14

AW: Units in bpl auslagern und als Package in Exe/Dll einbinden

  Alt 8. Jun 2024, 10:14
Habe jetzt mal versucht nach Eurem Rat, die Module und das Hauptprogramm ohne Packages zu kompilieren. Leider klappt das, vermutlich wegen der verwendeten Komponenten, gar nicht. Ich denke, wenn ich mich recht erinnere, dass das an dem verwendeten TdxBarManager von DevExpress liegt. Muss ich aber noch testen.

Es gibt einen Toolbar im Hauptprogramm und dann jeweils auch wieder welche in den einzelnen Modulen, die als dll eingebunden werden und dort in einem Panel das jeweilige Modulfenster anzeigen. Ich glaube, mehrere BarManager vertragen sich nicht. Wie gesagt, muss ich noch testen, aber aktuell wird das Modul-Formular nicht im Panel angezeigt - und es erscheint eine leider kryptische Fehlermeldung. Ich geb Bescheid, woran es wirklich liegt, wenn ich die Zeit habe, das in Ruhe zu testen.

Ich bin übrigens gerade dran, eine Wiki-Seite für das Programm zu erstellen. Hier mal die url, auch wenn es noch lange nicht "fertig" ist. So kann man sich schon ein wenig vorstellen, wie das Programm aussieht und was es tut

Insights

Viele Grüße
Harald
Harald Schmid

Geändert von hschmid67 ( 8. Jun 2024 um 10:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.331 Beiträge
 
Delphi 12 Athens
 
#15

AW: Units in bpl auslagern und als Package in Exe/Dll einbinden

  Alt 8. Jun 2024, 10:24
Objekte/Klassen dürften NIEMALS über DLL-Grenzen hinweg genutzt werden. (ohne Packages)

ohne ShareMem hat jeder seinen eigenen Speichermanager
* in einem Modul (EXE/DLL) reservierter Speicher kann nicht in einem anderen Modul verändert werden
* * die Reservierung des Speichers ... der Inhalt ist was Anderes
* * z.B. die Länge eines Strings ändern, bzw. den String einer anderen Variable/Parameter zuweisen (wenn es passieren kann, dass ein String dabei freigegeben wird)

ohne Packages hat jedes Modul seine eigene Deklaration von Typen und ihrer Methoden, sowie eine komplett eigene TypeInfo/RTTI
* selbst wenn man denkt es sei identisch, ist das NIEMALs sicher
* durch Optimierung kann der Kompiler/Linker optimieren und z.B. "ungenutzte" Felder in der Klasse "weglassen"
* ist das in beiden Modulen unterschiedlich, dann denkst das eine Modul an Adresse+5 wäre das Feld, aber das Andere Modul denkt dort wäre etwas Anderes


Bei Nutzung von Interfaces sieht das Anders aus.
* hier muß man zwar drauf achten, dass alle Seiten die selbe gleiche Definition besitzen,
* aber intern wird jeder Methodenaufruf an das Modul weitergeleitet, wo das Interface/Object erstellt wurde (Create)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Jun 2024 um 10:26 Uhr)
  Mit Zitat antworten Zitat
johndoe049

Registriert seit: 22. Okt 2006
148 Beiträge
 
#16

AW: Units in bpl auslagern und als Package in Exe/Dll einbinden

  Alt 8. Jun 2024, 12:01
Auch wenn es vielleicht Off Topic erscheint, aber nur zum Verständnis gefragt:


Wenn ich das richtig verstehe ist die Planung, dass die Kunden, je nach Lizenz, nur einige oder alle .dll Dateien zum Hauptprogramm bekommen?


Was für ein Prüf Protokoll willst du dafür erstellen?

Ich weiss zwar nicht, wie das bei kaufmännischer Software ist, aber bei uns im Steuerungsbereich müsste man alle möglichen Kombinationen an Hauptprogramm und .dll bei jeder Änderung auf Seiteneffekte, Kompatibilität, Eingriffsmöglichkeiten, etc. prüfen. Durch die EU Cyber Richtlinie, die ja jetzt unter anderem auch für Fahrstuhlsteuerungen, Maschinensteuerungen und Fahrzeugsteuerungen gilt, ist das ein erheblicher Test- und Dokumentationsaufwand. Das ist unheimlich Kostenintensiv. Daher machen die meisten im Steuerungsbereich die Einschränkungen über Funktionsfreischaltung im Lizenzcode oder Lizenzdongle und Updates über Binäre Delta Updates.

Ist das bei kaufmännischer Software nicht so relementiert? Kann man da wirklich "machen was man will, hauptsache es funktioniert"? Wie macht Ihr da das Qualitätsmanagement und die Prüfdokumentation oder ist das auch nicht notwendig?
  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 11:19 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