AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Sonstiges Delphi Flexibles Pluginsystem
Thema durchsuchen
Ansicht
Themen-Optionen

Flexibles Pluginsystem

Ein Thema von gsh · begonnen am 19. Jul 2006
Antwort Antwort
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Flexibles Pluginsystem

  Alt 19. Jul 2006, 22:55
Hi

Ich hab mir mehrere Monate lang den Kopf darüber zerbrochen wie man am besten ein Pluginsystem realisiert.
Dann als ich am Rande der Verzweiflung war schaute ich wie in Trillian das Pluginsystem (das in meinen Augen sehr gut durchdacht ist) realisiert wurde. Dazu half mir dieser Link: http://www.trillian.cc/support/sdkmanual.php
Nach ein paar Tagen hatte ich mir durch Hilfe von der sdk mein eigenes Pluginsystem entwickelt das etwas abgekupfert ist. Aber ich habe keinen Code kopiert. Der gesamte Code ist von mir geschrieben worden. Außerdem nutze ich die SDK nur als Startidee die restlichen Überlegungen sind von mir

So genug geredet nun zum System:
In diesem System braucht die PluginDLL nur eine procedure zum exportieren. Mit dieser procedure die nur zwei Parameter hat/braucht kann alles gesteuert bzw. auch leicht erweitert werden.

Also man nehme in der DLL eine procedure die so aufgebaut ist:
procedure PluginMain(Befehl : PChar; Parameter : Pointer); stdcall; und dann schreibt man am besten eine eigene Unit die man Öffentlich verbreiten kann. In der werden die ganzen Records deklariert. Diese muss dann in der Anwendung und in der PluginDLL hinzugefügt werden.
z.b.:
Delphi-Quellcode:
type
  TPluginRecord_PluginInit = packed record
    PluginSend : procedure(Befehl : PChar; Parameter : Pointer);
    NochEinPChar : PChar;
    UndHaltwasManWillOderBraucht : Irgendwas;
  end;
so jetzt kann man in der Anwendung die PluginDLL laden und im Plugin die PluginMain Procedure aufrufen. Als Befehl z.b. 'PluginInit' und der Parameter ist das Record mit den Daten die das Plugin für diesen Befehl braucht:
Delphi-Quellcode:
var
  TempPluginRecord_PluginInit : TPluginRecord_PluginInit;
  PluginMain : procedure(Befehl : PChar; Parameter : Pointer);
begin
  {Plugin laden und PluginMain procedure zuweisen}
  TempPluginRecord_PluginInit.PluginSend := PluginSend; //procedure im Hauptprogramm im record speichern
  TempPluginRecord_PluginInit.NochEinPChar := 'blabla';
  PluginMain('PluginInit', @TempPluginRecord_PluginInit);
end;
Im Plugin:
Delphi-Quellcode:
procedure PluginMain(Befehl : PChar; Parameter : Pointer); stdcall;
begin
  if Befehl = 'PluginInitthen
  begin
    PluginSend := TPluginRecord_PluginInit(Parameter^).PluginSend; //Procedure Variable von Record zuweisen
    ShowMessage(TPluginRecord_PluginInit(Parameter^).NochEinPChar);
    PluginSend('Befehl an die Anwendung', nil); //z.b. ein zurück Befehl an die Anwendung
  end;
end;
Dann müsst ihr nur noch eure Anwendung mit PluginBefehlen zupflastern.
z.b. wenn irgendein Menu geöffnet wird:
PluginMain('MenuBlaBla open', nil); natürlich könnt ihr auch eine Record übergeben aber wenn ihr keine weiteren daten übergeben müsst dann einfach nil schreiben.
Umso mehr ereignisse den Plugins mitgeteilt werden umso bessere plugins können geschrieben werden


So ich hoff ich hab’s gut beschrieben


Ich stelle diese Code frei zu Verfügung. Aber wenn jemand den Code verwendet kann er mich wenn er will gerne in seinen Programm erwähnen.


Eine Diskussion zu diesem System gibt es hier.

[edit=Chakotay1308]Diskussions-Link angefügt. Mfg, Chakotay1308[/edit]
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Antwort Antwort

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 12:42 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