2010-08-20 10 views
12

Ich möchte Delphi-Plugin-Framework entwerfen. Es gibt drei Optionen:
1. DLL
2. BPL
3. COM-Schnittstelle

Jede Option einige Nachteile hat.Delphi-Plugin-Framework

DLL - Problem mit MDI - Anwendung, Formulare aus dem Plugin können nicht in die Host - Ex - mdi - Anwendung eingebettet werden.
BPL - Jedes * .bpl-Plugin und * .exe-Host-Anwendung muss mit der gleichen Version von Delphi kompiliert werden.
COM - Schnittstellen {xxx-xx-xxx-xx} müssen im System registriert sein, (regsvr) So Plugin-Framework kann nicht tragbar sein!

Ist alles wahr was ich oben geschrieben habe? Wenn nicht, bitte korrigieren Sie mich, oder gibt es eine andere Möglichkeit?
danke

+0

möglich Duplikat [Plugins System für Delphi-Anwendung? - bpl vs dll] genommen haben (http://stackoverflow.com/questions/1192734/plugins-system-for-delphi- application-bpl-vs-dll) –

+0

Auch möglich Duplikat von: [Wie man am besten Plugin-Fähigkeiten zu einem Delphi-Programm hinzufügt] (http://stackoverflow.com/questions/365968/how-best-to-add-plugin-capability -to-a-delphi-programm) – lkessler

+1

Es ist nicht so, dass COM-Schnittstellen registriert werden müssen. Wenn Sie wissen, wo sich die implementierende DLL befindet, können Sie sie laden und ihre COM-bezogenen Funktionen direkt aufrufen. Es ist nicht notwendig, dass das Betriebssystem dies für Sie tut.Und das macht es im wahrsten Sinne des Wortes portabel: Sie können den Code auf anderen Betriebssystemen kompilieren, und Sie können das Programm auf ein USB-Laufwerk legen und es überall ausführen. –

Antwort

8

Ja, was Sie geschrieben haben, ist korrekt. Alle diese haben Vor- und Nachteile, die Frage ist, was für Sie wichtig ist, Sie haben nicht gesagt, was Sie tun möchten, also können wir Ihnen nicht sagen, wie es geht.

Im Allgemeinen würde ich BPL standardmäßig auswählen, DLL verwenden, wenn Sie es aus nicht Delphi-Anwendungen verwenden müssen, und wählen Sie COM nur, wenn Sie wirklich müssen.

Die Alternative besteht darin, keine eigenen zu erstellen, da mehrere Delphi-Plug-in-Frameworks verfügbar sind.

Auch hat dieses Thema hier bereits diskutiert wurde, finden Sie unter:

1

Eine weitere Möglichkeit, eine Scripting-Schnittstelle aufweisen, wie mit Python oder Pascalscript. Dieser Ansatz bietet viele Vorteile, von denen nicht zuletzt die Plugin-Quelle auch die ausführbare Datei ist, was das Debuggen und Teilen erleichtert.

0

Wir verwenden DLLs, auch wenn sie nur mit einer Delphi-Anwendung verwendet werden. Dll-Formulare sind in das Hauptformular eingebettet und verwenden Tabs anstelle von MDI. Damit DLL funktioniert, verwenden wir auch einen Shared Memory Manager und bauen mit Laufzeit-Paketen: vcl, rtl und unserem eigenen Paket.

+0

Ja, es gibt einige Problemumgehungen, wie man den Fehler "TFont zu TFont nicht zuordnen kann" und TFrame von * .dll kann in Host * .exe-Anwendung platziert werden, aber es gibt einige andere Probleme mit Tab-Reihenfolge mit eingebetteten TFrame, (nach dem Drücken der Tabulatortaste wird der Fokus nicht zum nächsten Steuerelement im Frame verschoben ...) Oder gibt es auch einen Workaround dafür? – Peter

+0

Auch Pfeiltasten werden vom Formular nicht abgefangen, was bedeutet, dass TEdit- und TMemo-Steuerelemente nicht korrekt funktionieren. – rhody