AGB  ·  Datenschutz  ·  Impressum  







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

PlugIn-System

Ein Thema von Tossi65 · begonnen am 12. Nov 2010 · letzter Beitrag vom 15. Nov 2010
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#11

AW: PlugIn-System

  Alt 12. Nov 2010, 16:33
@RWarneke
Ich möchte die Programmteile dynamisch laden. Ist ein Modul nicht da, gibt es halt den Programmteil nicht.
So kann man eine Adressverwaltung immer weiterentwickeln bis zu einen WaWi!!!!
Dann schaue Dir mal Interfaces an. Damit solltest Du soetwas hinbekommen. Ich habe dazu dieses Tutorial von sakura benutzt und hatte bis jetzt noch keine Probleme. Ich muss allerdings sagen, dass ich den ersten und den zweiten Teil vermischt habe um mehr Flexibilität zu erreichen.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#12

AW: PlugIn-System

  Alt 12. Nov 2010, 16:47
Vielleicht brauchen wir noch eine Begriffsklärung was ein Plugin überhaupt ist.

Ein Plugin erfüllt eine öffentliche Schnittstelle (bestimmtes Interface oder auch eine Reihe von DLL-Funktionen)
Diese Schnittstelle sollte so designt werden, dass sie sich während der Lebenszeit der Anwendung nicht mehr verändert.

Plugins können in (fast) jeder Programmiersprache erzeugt werden.
Die Hauptanwendung kann Plugins anhand bestimmter Kriterien (z.B. best. Verzeichnis oder Anhand der COM-Kategorie) erkennen und im Prinzip beliebig viele Plugin dynamisch laden.

Ein Anwendungsmodul (so will ich das mal nennen) ist dagegen ein Teilstück einer modularisierten Anwendung.
In .NET entspricht das einem Assembly.
Jedes Anwendungsmodul hat seine eigene Schnittstellen die nicht öffentlich sind.
Während die Anwendung wächst können sich auch die Schnittstellen zu den Anwendungsmodulen verändern.
Anwendungsmodule müssen in der gleichen Entwicklungsumgebung erzeugt werden wie die Hauptanwendung.
Anwendungsmodule haben zwei Vorteile:
* man kann dem Benutzer best. Anwendungsmodule vorenthalten
* bei Bugfixes muss evtl. nur das Anwendungsmodul upgedatet werden

Ansonsten gibt es nur Nachteile für Delphi Programme.
Andreas
  Mit Zitat antworten Zitat
Tossi

Registriert seit: 6. Jul 2003
Ort: Weserbergland
20 Beiträge
 
Delphi 7 Enterprise
 
#13

AW: PlugIn-System

  Alt 12. Nov 2010, 16:55
@Shmia
Ok sorry wenn ich etwas vertauscht habe, aber ich meine letzteres eben Anwendungsmodul.

Genau wie Du es beschrieben hast sollte es bestenfalls laufen. Das Porgramm wächst eben über die Module, die der Kunde dazu kaufen kann. Aber eben die Modulariesierung und eben die Umsetzung in die Listen da hapert es!

Das einlesen der Module aus einem Verzeichnis heraus, kein Problem aber wie komm ich an die Formulare in den Modulen
und wie sprech ich diese dann an.

Thx
Tossi

Geändert von Tossi (12. Nov 2010 um 17:06 Uhr)
  Mit Zitat antworten Zitat
Tossi

Registriert seit: 6. Jul 2003
Ort: Weserbergland
20 Beiträge
 
Delphi 7 Enterprise
 
#14

AW: PlugIn-System

  Alt 12. Nov 2010, 19:36
hey,
ich dachte mir die Module einfach wie eine Dll mit LoadLibrary laden und bei Erfolg den Zeiger und Name in eine StringList. Nu müsste man die beinhalteten Forms ebenfalls in eine Liste packen. Da hakt es bei mir momentan.


Thx
Tossi
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#15

AW: PlugIn-System

  Alt 12. Nov 2010, 21:08
Für die Forms sind die DLL's zuständig, Du musst exports für die gewünschten Funktionalitäten schreiben.
Du kannst den DLL's ein Callback mitgeben, über den sie die Hauptanwendung mit Informationen für Menüeinträge versorgen kann oder ein von der Hauptanwendung erstelles und wieder hochgereichtes Menuitem mit Leben zu erfüllen.
Der ganze Informationsaustausch lebt von sinnvoll implementieren Callbackfunktionen und exports.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#16

AW: PlugIn-System

  Alt 12. Nov 2010, 21:19
Beispiel
dll/bpl A enthält Fastreport
dll/bpl B enthält Fastreport
Fastreport registriert sich über Registerclass

Modul A kann problemlos verwendet werden.
Modul B kann problemlos verwendet werden.

Wird versucht eines der beiden Module nachzuladen, wenn das jeweils andere Modul bereits geladen ist, dann knallt es und die Anwendung stürzt ab.
Hier nützen mir auch Interfaces nicht.
Das Problem kann ich einzig über ein Com-Object lösen.
Ich selbst habe mir ein Pugin-System auf Basis von Exe-Dateien gebaut.
Das Hauptprogramm ruft über einen Taskcontroler eine EXE auf und versorgt diese über Aufrufparameter.
Die Exe selbst kann z.B. ein beliebiges Panel im Hauptprogramm als Parent haben.
Das Ganze kann sowohl wie Show oder Showmodal aufgerufen werden. Nach Beenden des der Plugin-Exe kann ein Returncode ausgewertet werden.

Beispiel:
Nach Klick auf einen Menüpunkt ein externes Programm modal starten, im Parent des aufrufenden Programmes anzeigen. Auf Beendigung warten und dann den Return-Code auswerten.

Delphi-Quellcode:
 Tools : TTaskControl;
 Tools := Task.Init(Parent, nil,'AUTTOOLS.EXE',modal);
 res := AutPlugin.Task.Startmodal(Self,Tools,'Kunde=1234,Rechnung=456,Artikel=1/2/3');
Warum ich keine bpl/dll verwende:
Die Module müssen immer in der gleichen Umgebung wie die exe kompiliert sein.
In unsauberen Umgebungen wie sie ab D7 abwärts entstanden sind, (z.B. bpl in System32) gilt das für alle anderen Delphiprogramme auf dem Rechner auch.
Also ich liefere Programm A,B,...Z an den Kunden aus. Dazu die Laufzeitumgebung. Alles läuft wunderbar.
Jetzt nehme ich für Programm J eine Änderung an irgendeinem Laufzeitmodul vor. Fazit neben den Änderungen für Programm J muss ich A..Z neu kompilieren und mit
ausliefern.
Von einem kleinen Compilerwechselchen von z.B. D2009 auf D2010 habe ich da noch garnicht geredet.
Delphi und Net haben den gleichen geistigen Vater. Net ist aus den Erfahrungen mit der Delpi- Entwicklung entstanden und Assemblys entschärfen fast alle Probleme , die bei der Modularisierung mit veralterten Programmiersystemen entstanden sind.
Wer heute noch größere Programmsysteme und diese auch noch modular ohne Sachzwänge mit D32 anfängt ist selber dran schuld.
Unter Sachzwängen verstehe ich entweder riese Altlasten an Code oder ein fortgeschrittenes Alter, wo ein Umgewöhnen nicht mehr möglich oder sinnvoll ist.
Dazu kommt im Vergleich zu anderen IDE noch die seit Versionen bugige IDE von Delphi.
Dabei muss man sich nichtmal von EB/CG und Delphi verabschieden, mit Delphi Prism steht eine um Generationen bessere Delphi-Version zur Verfügung.
Wenn ich nach Italien in den Urlaub fahre und habe einen Mercedes und einen Trabi-Oldtimer in der Garage stehen, dann nehme ich auch den Mercedes und nicht den Oldtimer.
Obwohl unter Abenteuergesichtspunkten ? ...

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#17

AW: PlugIn-System

  Alt 12. Nov 2010, 23:05
Beispiel
dll/bpl A enthält Fastreport
dll/bpl B enthält Fastreport
Fastreport registriert sich über Registerclass

Modul A kann problemlos verwendet werden.
Modul B kann problemlos verwendet werden.

Wird versucht eines der beiden Module nachzuladen, wenn das jeweils andere Modul bereits geladen ist, dann knallt es und die Anwendung stürzt ab.
Wie wäre es, einen Fastreport-Wrapper zu bauen?
Sowohl das Hauptprogramm als auch die DLLs kennen bestimmte Interfaces.
Das Hauptprogramm besitzt Klassen, die diese Interfaces implementieren.
Das Hauptprogramm ruft dann einfach eine bestimmte DLL-Funktion auf und übergibt die Interfaces als Parameter.
... und schon läufts!
Genauso auch mit Formularen.
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#18

AW: PlugIn-System

  Alt 13. Nov 2010, 05:56
Wie wäre es, einen Fastreport-Wrapper zu bauen?

Genauso auch mit Formularen.
So haben wir es letztendlich realisiert.
Aber warum mit viel Aufwand um die Unzulänglichkeiten eines Entwicklungssystem herum programmieren.
Nur um das zu erreichen, was in moderneren Systemen Standard ist?
  Mit Zitat antworten Zitat
plusplus

Registriert seit: 30. Jul 2010
106 Beiträge
 
Delphi 2009 Architect
 
#19

AW: PlugIn-System

  Alt 13. Nov 2010, 07:25
I love working with DLL's and I don't understand why there are so many against it. It is robust and flexible. You can plug in C DLL or Delphi DLL. Same with BPL.

Abstract and dynamic loading is the key. Once you know your way around your app can be a plug and play solution that is not only performing well but also fun to maintain.
Grid Computing made simple - http://xerocoder.com
  Mit Zitat antworten Zitat
plusplus

Registriert seit: 30. Jul 2010
106 Beiträge
 
Delphi 2009 Architect
 
#20

AW: PlugIn-System

  Alt 13. Nov 2010, 07:28
@Peter - You are right with BPL's with DLL you don't have that problem you are describing and DLL's work fine even with different compilers.
Grid Computing made simple - http://xerocoder.com
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:36 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