Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Flexibles Pluginsystem: Diskussion (https://www.delphipraxis.net/74448-flexibles-pluginsystem-diskussion.html)

cruiser 20. Jul 2006 05:42


Flexibles Pluginsystem: Diskussion
 
Flexibel heisst aus meiner Sicht aber auch, dass der Entwickler der Anwendung nicht wissen muss, was der Entwickler des Plugins mit dem Plugin in/an/mit/durch die/der Anwendung machen will. Soll heissen, woher weiss die Anwendung, welche Daten sie wann dem Plugin liefern muss?

Vielleicht löst du das erst mal noch :wink:


Dieses Thema bezieht sich auf diesen Codelib-Beitrag.
[edit=Phoenix]Codelib-Bezug eingefügt. Mfg, Phoenix[/edit]

gsh 20. Jul 2006 12:58

Re: Flexibles Pluginsystem
 
naja die daten sind immer die gleichen

Bsp von Trillian Load Befehl:
Zitat:

unsigned int struct_size; //<-- den braucht man nicht wirklich

/* Information given to the plugin
*/

char *config_directory;
char *skin_directory;
char *temp_directory;

plugin_function_send plugin_send; //Da wird die Callback übergeben

/* Plugin Fills out this information //de sachen kann das Plugin ausfüllen
*/

char guid[128];

char name[256];
char company[256];
char version[64];
char description[1024];

/* 2.0 information: given to the plugin //ab version 2 sind jetzt auch noch diese Werte enthalten
*/
char *global_config_directory;
char *trillian_directory;
char *language_directory;
Was dem Plugin übergeben wird ist fix im Programm drinnen. Aber wenn man jetzt ne Funktionen reinhat und ne Parameter dazu dann muss man die neuen Parameter einfach beim Record unten hinzufügen. Dann funktionieren die alten Plugins noch nur sie können nicht alles ausschöpfen. Aber wenn jemand ein Plugin programmieren möchte dann holt er sich die neue Plugin Unit und dann kann er die neuen werte auch nutzen ... des wegen flexibel

Des hab ich sogar vergessen zu sagen: Da dem Plugin ein Pointer von der Variable des Records übergeben wird. Somit kann das Plugin die Daten verändern und die Anwendung kann das dann ohne Probleme auslesen. z.b. Versions nummer des Plugins

kalmi01 20. Jul 2006 13:29

Re: Flexibles Pluginsystem
 
Hallo Alex,

Deine Idee ist nicht schlecht, hat aber einen gaaanz kleinen Haken:
Delphi-Quellcode:
PluginSend('Befehl an die Anwendung', nil);
'Befehl an die Anwendung' muss in der PlugIn-dll geparse't werden, was etwas Zeit kostet.

Ich hatte soetwas ähnliches in meinem Editor auch gemacht, je komplexer das System wurde, umso langsamer wurde es aber.
Allerdings ist Deine Methode unschlagbar flexibel.

gsh 20. Jul 2006 13:57

Re: Flexibles Pluginsystem
 
Zitat:

Zitat von kalmi01
Deine Idee ist nicht schlecht, hat aber einen gaaanz kleinen Haken:
Delphi-Quellcode:
PluginSend('Befehl an die Anwendung', nil);
'Befehl an die Anwendung' muss in der PlugIn-dll geparse't werden, was etwas Zeit kostet.

:gruebel: was meinst du? was kostet da zeit?
Des war nur ein Beispiel das das Plugin JEDERZEIT einen Befehl an die Anwendung senden kann damit die anwendung irgendwas macht.
Das kann man machen muss man aber nicht.

Zitat:

Zitat von kalmi01
Ich hatte soetwas ähnliches in meinem Editor auch gemacht, je komplexer das System wurde, umso langsamer wurde es aber.

hmm des es etwas langsamer wird ist klar aber des aus einen anderen grund

Zitat:

Zitat von kalmi01
Allerdings ist Deine Methode unschlagbar flexibel.

So war es auch gedacht :mrgreen:

kalmi01 20. Jul 2006 14:28

Re: Flexibles Pluginsystem
 
Zitat:

was meinst du? was kostet da zeit?
wenn Dein Prog
Delphi-Quellcode:
PluginMain(Befehl, Parameter);
aufruft, dann muss in "PluginMain" ja "Befehl" geparse't werden
Delphi-Quellcode:
if (Befehle = 'BringToFront') then machwas;
if (Befehle = 'GotoXY') then machwasanderes;
usw.
was nicht sooo performant ist, als wenn "machwas" oder "machwasanderes" direkt aufgerufen werden.
Selbst wenn man mit "Goto" aus der Schleife rausspringt.

Insbesondere wenn man
Zitat:

Dann müsst ihr nur noch eure Anwendung mit PluginBefehlen zupflastern.
z.b. wenn irgendein Menu geöffnet wird
das macht.

alias5000 20. Jul 2006 14:39

Re: Flexibles Pluginsystem
 
Zitat:

Zitat von gsh
hmm des es etwas langsamer wird ist klar aber des aus einen anderen grund

Erzähl mal :wink:

gsh 20. Jul 2006 15:41

Re: Flexibles Pluginsystem
 
aso jetzt versteh ich des wie du des meinst ... ja das war auch meine Überlegung das alles etwas langsamer wird

naja flexiblität hat seinen Preis :mrgreen:

noch ein Tipp:
Delphi-Quellcode:
if Befehl = '1' then
begin
  Bla;
  exit;
end;
if Befehl = '2' then
begin
  BlaBla;
  exit;
end;
if Befehl = '3' then
begin
  BlaBlaBla;
  exit;
end;
Dann wird sofort nachdem er den Befehl hat rausgesprungen (sowas wie goto)

DGL-luke 20. Jul 2006 15:49

Re: Flexibles Pluginsystem
 
dat würd ich anders machen ^^

Delphi-Quellcode:
case AnsiIndexStrings(Befehl,['1','2','3']) of
  0: Do_One;
  1: Do_Two;
  2: Do_Three;
end;
mMn sehr viel eleganter...

kalmi01 20. Jul 2006 15:51

Re: Flexibles Pluginsystem
 
Zitat:

Delphi-Quellcode:
if Befehl = '1' then
begin
  Bla;
  exit;
end;

Naja, dann könnte man aber auch gleich mit nem "case of" arbeiten.
"FindComponent" ist da wohl doch etwas performanter.

gsh 20. Jul 2006 15:58

Re: Flexibles Pluginsystem
 
ah des ist ja genial

ich hätte schon case genommen ... mein problem war einfach nur des case nur mit integer geht und die Funktion AnsiIndexStrings kannte ich nicht

@kalmi01: FindComponent? Wie soll des gehen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 Uhr.
Seite 1 von 4  1 23     Letzte »    

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