AGB  ·  Datenschutz  ·  Impressum  







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

Flexibles Pluginsystem: Diskussion

Ein Thema von cruiser · begonnen am 20. Jul 2006 · letzter Beitrag vom 3. Mai 2009
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von gsh
gsh

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

Re: Flexibles Pluginsystem: Diskussion

  Alt 5. Aug 2006, 01:22
so ich hab nochmal wegen dem Observer nachgedacht und mir ist dann ein super konzept eingefallen
hab heut den ganzen Tag an diesem System programmiert.

Nun ist es ein Flexibles Observer Pluginsystem

Die Flexiblität des Pluginsystems ist erhalten geblieben. Nur muss das Plugin beim starten der Anwendung bei meinem Observer anmelden. Sobald einmal angemeldet wird das Plugin bei diesem Ereignis benachrichtigt und kann sofort darauf reagieren.


*auf Uhr schau* (1:20 Uhr) Ich bin jetzt aber viel zu müde um ein Tutorial darüber zu schreiben, denn das ganze ist hoch komplex und wird wahrscheinlich nicht leicht zum erklären sein. Vielleicht komm ich morgen oder übermorgen dazu.
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
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#22

Re: Flexibles Pluginsystem: Diskussion

  Alt 11. Apr 2007, 12:23
Kann man eigentlich auch Plugins in einer anderen Sprache programmieren?

Also das das Programm in Delphi ist, das Plugin aber beispielsweise C++ oder so?

Ich weis dass es Records nur unter Delphi gibt(oder? )
Aber wenn man etwas anderes verwendet was andere Sprachen auch können müsste es doch gehen oder?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

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

Re: Flexibles Pluginsystem: Diskussion

  Alt 11. Apr 2007, 15:44
sicher kann man das

und man kann auch records benutzen
weil records ist ja nichts delphi spezielles (außer der name) sonderen nur eine datenttyp wo mehere variablen nacheinander reingestopft werden.
In C++ und so gibt es des imho auch nur weiß ich gerade nicht wie es heißt
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
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#24

Re: Flexibles Pluginsystem: Diskussion

  Alt 11. Apr 2007, 15:48
... records gibt es auch in C, die heißen da nur structs. und sind je nach cmopiler eventuell anders aligned, weshalb man in delphi packed records verwenden sollte.
Lukas Erlacher
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#25

Re: Flexibles Pluginsystem: Diskussion

  Alt 11. Apr 2007, 15:54
also wenn ich packed records verwende kann ih ohne größere Probleme die Plugins in anderen Sprachen schreiben?

Ihr sagt in C da heissen die Structs, C++, wo noch? Gibts da irgendwo Informationsquellen dafür?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

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

Re: Flexibles Pluginsystem: Diskussion

  Alt 11. Apr 2007, 15:56
Mir ist gerade eingefallen des ich des selber mal in der DP gefragt hab: Klick Mich
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
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#27

Re: Flexibles Pluginsystem: Diskussion

  Alt 2. Okt 2007, 14:47
Wie sieht es denn aus mit dem Flexiblen Observer Pluginsystem Tutorial? Würde mich scon interessieren, da ich da im moment auch dran arbeite sowas zu machen. Wär cool, wenn du das noch mal machen könntest gsh...
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

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

Re: Flexibles Pluginsystem: Diskussion

  Alt 2. Okt 2007, 19:29
hmm jojo wenn ich dazu zeit hätte, aber da ich zur zeit 3,5 Jobs habe bin ich ehrlich gesagt zu erschöpft um mich da dran zu setzen
aber mal schaun wollt mir jetzt eh mal wieder urlaub gönnen
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
Benutzerbild von LH_Freak
LH_Freak

Registriert seit: 2. Mär 2005
Ort: Nürnberg
222 Beiträge
 
#29

Re: Flexibles Pluginsystem: Diskussion

  Alt 5. Nov 2007, 17:50
heyho, also ich hab mich jetzt auch mal an ein Pluginsystem gesetzt...im Grunde ist das ne Mischung aus dem Tutorial von sakura und deiner Idee (denk ich zumindest oO ^^) also es ist auf jedenfall nichts besonderes denk ich...
es gibt eine Klasse TPlugin, von dem man seine Plugins ableiten kann...jedes Plugin enthält den Befehl Execute dem man dann die Parameter übergeben kann...dann gibts noch die Callbackprozedur Send, mit der dann Werte zurückgegeben werden können...sprich ich übergeb z.B. einem Downloadplugin den Befehl CMD_DOWNLOAD (einfach Konstanten) und dazu dann die Parameter als array of string, und in der DLL wird der Command ausgewertet, verarbeitet, und mit Send werden dann wieder Daten zurückgegeben, z.B. die Fortschrittsanzeige...in der Anwendung sieht dass dann z.B. so aus

Delphi-Quellcode:
uses {...} PluginDefinition;

var plugin1: TPlugin;

procedure RecieveProc(cmd: integer; parameter: array of string);
begin
  case cmd of
  // hier werden dann die commands ausgewertet
  CMD_SHOWMESSAGE: showmessage(parameter[0]);
  end;
end;

{...}

procedure TForm1.FormCreate(Sender: TObject);
var
  name: string;
begin
  plugin1 := TPlugin.Create;
  loadplugin('plugins/plugin.dll', plugin1);
  plugin1.Send := RecieveProc;

  plugin1.Execute(CMD_GET_NAME,['']); // nur ein Beispiel ;-)
end;
Die PluginDefinition.pas enthält alle Klassen und die FUnktion zum Laden des Plugins, sprich man braucht außer dieser Unit und der RecieveProc Prozedur nichts...in der DLL nimmt man ebenfalls die plugindefinition.pas, und erstellt sich eine Klasse...z.B.

Delphi-Quellcode:
{...}

TPlugin01 = class(TPlugin)
  public
    constructor Create(aParent: THandle); overload;
    function GetName: string; override; stdcall;
    function GetAuthor: string; override; stdcall;
    function GetComment: string; override; stdcall;
    procedure Execute(cmd: integer; parameter: string); override; stdcall;
  end;

constructor TPLugin01.Create(aParent: Cardinal);
begin
  inherited Create;
  Parent := aParent;
end;

function TPlugin01.GetName: string;
begin
  result := 'Testplugin';
  //showmessage('Testplugin');
end;

function TPlugin01.GetAuthor;
begin
  result := 'LH_Freak';
end;

function TPlugin01.GetComment;
begin
  result := 'Nur ein Test';
end;

procedure TPlugin01.Execute(cmd: Integer; parameter: string);
begin
  case cmd of
  CMD_GET_NAME: send(CMD_SHOWMESSAGE, ['Testplugin']);
  end;
end;

function LoadPlugin(Parent: THandle; var PlugIn: TPlugIn): Boolean; export;
begin
  try
    PlugIn := TPlugIn01.Create(Parent);
    Result := True;
  except
    Result := False;
  end;
end;

exports
  LoadPlugin name 'LoadPlugin';

begin
  //MessageBeep(0);
end.
Das mag jetzt zwar nicht soooo besonders anspruchsvoll und schwierig sein, und über Interfaces könnte man denk ich mal da schon bessere Sachen machen, aber es erfüllt seinen Zweck Prima...man definiert sich einfach seine Konstanten, und kann sich damit dann doch auch eine ganz flexible API erstellen...
Bei Bedarf kann ich die PluginDefinition.pas ja mal hier veröffentlichen

Gruß
Flo

P.S.: Ich werde das ganze demnächst in den MUH Messenger einbauen, da mich das schon irgendwie reizt auszuprobieren was damit alles geht, und das eignet sich ja mal wohl perfekt
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#30

Re: Flexibles Pluginsystem: Diskussion

  Alt 5. Nov 2007, 18:05
Für Plugins empfehlen sich Interfaces, gerade dann, wenn man auch Sprachenunabhängig arbeiten will (C, Delphi...)

Oder Packages, wenn man bei Delphi bleibt...

Denn mit sowas da
Delphi-Quellcode:
function LoadPlugin(Parent: THandle; var PlugIn: TPlugIn): Boolean; export;
begin
  try
    PlugIn := TPlugIn01.Create(Parent);
    Result := True;
  except
    Result := False;
  end;
end;
in dlls, kommt man sehr sehr schnell ans Limit der flexibilität...


Bye Christian
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 22:13 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