AGB  ·  Datenschutz  ·  Impressum  







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

PlugIns mal wieder

Ein Thema von CHMedia · begonnen am 7. Aug 2010 · letzter Beitrag vom 7. Aug 2010
Antwort Antwort
CHMedia

Registriert seit: 7. Aug 2010
1 Beiträge
 
Delphi 2 Desktop
 
#1

PlugIns mal wieder

  Alt 7. Aug 2010, 13:24
Hallo,
ich habe ein wenig Vorkenntnisse was die Programmierung mit Delphi betrifft. Allerdings habe ich vorher noch nie PlugIns programmiert.
Ich probiere zur Zeit eine Applikation zu erstellen, die diverse Dateiformate öffnen kann und Daten aus den Dateien extrahieren soll. Diese Daten sollen später in der Applikation dann angezeigt werden.
Um das updaten zu vereinfachen und den Code übersichtlicher zu gestalten möchte ich nun eine Host-Applikation erstellen und für jeden unterstützen Dateityp ein PlugIn erstellen.
Ich habe mir das folgendermaßen vorgestellt:
  • Beim Programmstart wird in einem vorgegebenen Verzeichnis nach PlugIns gesucht -- Erledigt
  • Jedes gefundenes PlugIn (*.dll) wird aufgerufen und nach dem unterstützten Dateiformat gefragt
    (Das PlugIn müsste also einen String zurückgeben, wie z. B. *.txt)
  • Wenn nun eine Datei in der Host-Applikation geöffnet wird, wird der Dateiname an das PlugIn übergeben.
  • Das PlugIn übergibt dann die Daten (z. B. als String) an die Host-Applikation.

Nun würde ich gerne wissen, wie ich Daten (Strings, Integer, Boolean) zwischen der Host-Applikation und dem PlugIn austauschen kann.
Später soll es z. B. auch möglich sein, dass ich eine Funktion in der Host-Applikation habe, die auf das Internet zugreift. Das PlugIn soll dann eine URL an die Host-Applikation senden und erhält den Inhalt der HTML-Seite zurück.

Ich hoffe, dass ich es einigermaßen verständlich erklärt habe, was ich vorhabe und das jemand mir behilflich sein kann.

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

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

AW: PlugIns mal wieder

  Alt 7. Aug 2010, 13:49
http://www.delphipraxis.net/497604-post.html

oder

Hier im Forum suchenPlugins
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 igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

AW: PlugIns mal wieder

  Alt 7. Aug 2010, 17:25
In meinem Pluginsystem, dass ich für Andorra 2D/Audorra geschrieben habe, definiere ich auf der Host-Seite eine abstrakte Klasse - zum Beispiel ("TImageLoader"). Diese definiert die Funktionen, die jeder "ImageLoader" bereitstellen muss - zum Beispiel "LoadImageFromFile".

In den Plugins implementiere ich die abstrakten Klassen und exportiere eine Funktion, die eine Instanz der Klasse zurückliefert. Du kannst in jeder Klasse für das Plugin (fast) alles machen, was du auch normalerweise in einer statisch gelinkten Klasse machen würdest. Du kannst nur nicht von der Host-Seite auf die RTTI der Klassen in der DLL zugreifen und mit dem Reservieren von Speicher, Strings und dynamischen Arrays musst du auch vorsichtig sein. Meine unten genannte Komplettlösung kümmert sich aber auch darum...

Beispiel:
Delphi-Quellcode:
//Host:

type
  TImageLoader = class
    public
      procedure GetFileExtensions(AStrs: TStrings);virtual;abstract;
      procedure LoadImageToMemory(AUrl: string; ATarMem: PByte);virtual;abstract;
  end;

  TImageLoaderConstructorFunction = function: TImageLoader;

//Plugin
type
  TPngImageLoader = class
    public
      procedure GetFileExtensions(AStrs: TStrings);override;
      procedure LoadImageToMemory(AUrl: string; ATarMem: PByte);override;
  end;

procedure TPngImageLoader.GetFileExtensions(AStrs: TStrings);override;
begin
  AStrs.Add('png');
  AStrs.Add('mng');
end;

procedure TPngImageLoader.LoadImageToMemory(AUrl: string; ATarMem: PByte);override;
begin
  //Lade bild
end;

function CreateImageLoader: TImageLoader;
begin
  result := TPngImageLoader.Create();
end;

exports
  CreateImageLoader;
Etwas ausgereifter und Allgemeiner habe ich dieses Prinzip hier implementiert. In dieser Implementierung musst du dich nicht um das Exportieren von Funktionen kümmern, sondern einfach jede Plugin-Klasse in eine eigene Unit verfrachten und die Klasse im "Initialization"-Abschnitt der Unit mittels AcRegSrv.RegisterClass(TPngImageLoader, CreatePngImageLoader); registrieren.
http://andorracommons.svn.sourceforg...14&view=markup

Und ich habe sogar mal ein Demo-Video dafür gemacht:
http://www.vimeo.com/6577988

Die Dokumentation zu meinem Plugin-System gibt es hier:
http://andorracommons.sourceforge.ne...p=AcPersistent

Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  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 18:23 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