Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Robustes Plugin-System (https://www.delphipraxis.net/144160-robustes-plugin-system.html)

MyRealName 2. Dez 2009 18:08

Re: Robustes Plugin-System
 
Zitat:

Zitat von ele
Die MAF-Komponenten kenne ich nicht, möglicherweise können sie mir einen Haufen Arbeit sparen. Dazu muss ich mir aber das ganze genauer ansehen.

Die MAF Komponenten wrappen (unter anderem) das ganze DLL Verwaltungszeugs zum laden/entladen, funktionsmappen in Komponenten, die einfach und ziemlich code frei zu nutzen sind. Sie stellen ausserdem die möglichkeit zur Verfügung, code dynamisch zu ändern (also in Delphi gesprochen zw. begin und end einer Methode code einfügen, ausschneiden oder ersetzen) während das Programm läuft und ohne die Module neu zu übersetzen.

Allerdings kann ich Dein Problem des schlechten Programmierers (der einen stack-oberflow produziert) nicht lösen mit meinen Komponenten. Und meiner Meinung nach gehst Du das ganze Problem von der falschen Seite an : Du willst Probleme unterdrücken oder besser gesagt verschieben, so dass sie das Programm nicht beeinträchtigen.
Ich würde eher in eine gute Fehler-Analyse investieren, da gibt es verschiedene Tools wie SmartInspect von Gurock Software, die Dir helfen können, Dein Programm ablauf zu tracken und Fehler schnell zu erkennen.

Auch die MAF Componenten haben einen Tracer, der sprünge in unter-Funktionen und variablen etc. loggen kann, allerdings nur rudimentär eingebaut, da es nicht die Aufgabe der Komponenten ist.

ele 2. Dez 2009 18:29

Re: Robustes Plugin-System
 
Der Entwickler der den Fehler programmiert hat, ist nicht mehr bei uns angestellt.

Solange ich hier arbeite kann ich schon sicherstellen, dass die Software gewisse Tests besteht. Allerdings kann man nicht immer alle Fälle Testen und vorallem möchte ich sicherstellen, das auch wenn ein Plugin von einem externen Entwickler kommt, dieses nicht das ganze System beeinträchtigen kann. Ausserdem kann man, wenn das Plugin in einem eigenen Prozess abläuft den Prozess abschiessen und neu starten, falls es sich nach einem bestimmten Timeout nicht meldet. Mach das mal mit einem Thread der gerade in einer DLL steckt. (Es sei gesagt: Das ist nicht zu empfehlen)

Ich kann die Software immer noch so erweitern, dass es auch Plugin-Dlls gibt, falls ich für gewisse Aufgaben mehr Performance benötige und eine enge Kopplung bevorzuge. Das habe ich auch schon gemacht und ich weiss wie man das realisieren kann.

Die Schwierigkeit liegt eben darin, dass ich gewisse Aufgaben in andere Prozesse auslagern möchte ohne das Gesamtsystem zu gefährden (Stichwort lose Kopplung). Ursprünglich wollte ich die ganze Kommunikation mit TCP/IP realisieren, aber dort ist der Aufwand gross, weil man

a) alle Funktionsaufrufe serialisieren und deserialisieren muss.
b) wehr viele Verbindungen benötigt. Mindistens eine pro Plugin.
c) wenn das ganze auch noch Multi-Threaded ist noch mehr Verbindungen benötigt oder eine sehr ausgeklügelte duplexfähige Kommunikation benötigt (mit Empfänger-Thread, Sender-Thread und entsprecheden Queues - und das jeweils pro Verbindungsendpunkt)

COM scheint mir im Moment die beste Lösung zu sein.

himitsu 2. Dez 2009 18:55

Re: Robustes Plugin-System
 
Zitat:

Zitat von ele
Ursprünglich wollte ich die ganze Kommunikation mit TCP/IP realisieren,

du könntest doch fertige Schnittstellen verwenden ... in Richtung RPC gibt es doch viele ausgeklügelte Systeme,
wo du dich um die grundsätzliche Verbindungsproblematik nicht kümmern mußt.

sirius 2. Dez 2009 19:34

Re: Robustes Plugin-System
 
Zitat:

Zitat von hanspeter

Das geht relativ einfach.
Ich fürchte aber, das da das UAC Monster auf der Lauer liegt.

Man kann auch mit LoadTypeLib(Ex) arbeiten. Dadurch würde man nichts installieren/registrieren müssen.
Man kann auch das Interface komplett selber implementieren, siehe dazu hier.

ele 2. Dez 2009 21:03

Re: Robustes Plugin-System
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von ele
Ursprünglich wollte ich die ganze Kommunikation mit TCP/IP realisieren,

du könntest doch fertige Schnittstellen verwenden ... in Richtung RPC gibt es doch viele ausgeklügelte Systeme,
wo du dich um die grundsätzliche Verbindungsproblematik nicht kümmern mußt.

Ich habe mich noch zu wenig mit RPC in Delphi befasst. Gibt es da was brauchbares? Ist das auch Multhithread fähig?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 2 von 2     12   

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