AGB  ·  Datenschutz  ·  Impressum  







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

Hydra 3.0 Plugin

Ein Thema von hanspeter · begonnen am 3. Sep 2007 · letzter Beitrag vom 17. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Hydra 3.0 Plugin

  Alt 3. Sep 2007, 16:34
Hallo,

hat verwendet wer dieses Tool und hat schon Erfahrung?
Ich bin gerade beim ausprobieren und bekomme eine Sache nicht hin.

In dem Plugin deklariere ich eine Klasse und möchte diese im Host verwenden.
Wie geht das?


Delphi-Quellcode:
Also Plugin:

TMeineClass = Class
  procedure Machewas;
end;

Im Host:

???.MacheWas;
Gruß Peter
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#2

Re: Hydra 3.0 Plugin

  Alt 3. Sep 2007, 16:50
An der Stelle würde ich eher an news://news.remobjects.com auf die Gruppe remobjects.public.hydra verweisen. Dort sind die Leute, die damit arbeiten
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Hydra 3.0 Plugin

  Alt 3. Sep 2007, 18:24
Hast du schon mal versucht unter Datei->Neu eine passende Hydraklasse zu finden ?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von luwo
luwo

Registriert seit: 8. Jan 2004
Ort: Bamberg
46 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Hydra 3.0 Plugin

  Alt 4. Sep 2007, 01:16
Hallo Hanspeter,

bei Hydra kannst du Host/Plugin-Kommunikation über Interfaces regeln, siehe auch Beispielprogramme.

guck doch mal hier, da wirst du sicher fündig.

Grüße Luwo
50726F626C656D3F204F53492D53636869636874203821
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Hydra 3.0 Plugin

  Alt 4. Sep 2007, 12:11
Ich bin im Moment noch am Experimentieren.
Macht aber keinen schlechten Eindruck.
Ich lasse mir das Framwork im Moment noch komplett vom Witzard generieren.
Möchte jetzt halt mehrfach benötigte eigene Klassen auslagern.
Das soll weniger ein Plugin System werden, sondern eine Programm-Modularisierung
erzeugen.

Gruß Peter
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Hydra 3.0 Plugin

  Alt 5. Sep 2007, 14:24
Zitat von luwo:
Hallo Hanspeter,

bei Hydra kannst du Host/Plugin-Kommunikation über Interfaces regeln, siehe auch Beispielprogramme.

Grüße Luwo
So jetzt habe ich es hinbekommen.
Das Teil ist richtig gut. Das Plugin wird als Dll angelegt. Auch mit MDI konnte ich noch keine Probleme entdecken.
Die Hilfe und die Demos in der Trialversion sind ein bischen dürftig, deswegen hatte ich auch die Startprobleme.
Für alle die das Framework mal testen möchten, hier eine Kurzanleitung:

1. Mit dem Wizard ein neues Plugin erzeugen.
Dazu Auswählen ob Visual oder Nonvisual. (Nonvisual setzt auf einem TDataModule auf)
2. Ein Interface für die eigenen Routinen anlegen.
Beispiel:
Delphi-Quellcode:
unit Uinterface;

interface
uses uHYVisualPlugin, uHYIntf, IBDatabase, DB, IBQuery, Classes;

type
 IAnwenderDat = interface(IHYNonVisualPlugin)
  ['{7B475BEC-A93E-4FE2-92A3-340C12F54037}']
    function GetDaten: string;
    procedure SetDaten(Val: string);
    function GetDatabase: TibDatabase;
    function GetQuery: TibQuery;
    function GetListe : TStringList;
  end;
Dieses Interface in dem Plugin einbinden.
Dazu die Definitionszeile anpassen:

Delphi-Quellcode:
type
  { TNonVisualPlugin }
  TNonVisualPlugin = class(THYNonVisualPlugin, IAnwenderDat)
Das Plugin mit den eigenen Methoden erweitern.

Auf der Hostseite kann man sich ebenfalls ein eigenes Projekt generieren lassen und dieses bei
Bedarf in die eigene Application kopieren.

Hier eine Interface - Variable einfügen und das Plugin laden.

Delphi-Quellcode:
with ModuleManager do begin
     LoadModule('NonVisualModule.dll');
     CreateInstance('MyFirstNonVisualPlugin', intfinstance); // See the initialization part of the unit fVisualPlugin.pas
     fNonVisualPlugin := intfinstance as IAnwenderDat;//IHYNonVisualPlugin;
Das wars.

Mit fNonVisualPlugin. ereiche ich alle eigenen Routinen und mit

Delphi-Quellcode:
 ModuleManager.ReleaseInstance(fNonVisualPlugin);
  ModuleManager.UnloadModule(0);
werde ich das Plugin wieder los.
Ein Messagemechanismus von dem Plugin an den Host ist bereits eingebaut.

Die erzeugten Plugin lassen sich sowohl von Delphi Win32 als auch von Net(C#/Chrome) aufrufen
bzw. erzeugen.
Win32 und Net kann somit beinahe beliebig kombiniert werden.

Mit Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Hydra 3.0 Plugin

  Alt 17. Sep 2007, 13:57
Hallo hanspeter,
hast du auch schon herausgefunden, wie das Plugin Methoden der Hostanwendunmg aufrufen kann?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Hydra 3.0 Plugin

  Alt 17. Sep 2007, 14:49
Zitat von Luckie:
Hallo hanspeter,
hast du auch schon herausgefunden, wie das Plugin Methoden der Hostanwendunmg aufrufen kann?
Ja klar.
Definiere in Plugin und Host ein Interface und dann z.B. im Plugin (Host as ICanClosePlugin).CloseMe(GetInstanceID);
Beispiel in "SelfClose".
Eine einfache Message kann direkt gesendet werden.

Host.SendMessage(Self, 1, PChar(aMessage));

Die Hostkomponente hat ein Ereignis für den Empfang des Ereignisses.
Praktisch ist es so, das man ein beliebiges Interface declarieren kann. Es können alle Datentypen verwendet werden, die
auch in Comobjecten möglich sind.
Das Interface auf Host und Pluginseite eingebunden und es muss nur noch der zugehörige Zeiger gecastet werden.

Host as MeinInterface , Plugin as MeinInterface.

Gruß
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Hydra 3.0 Plugin

  Alt 17. Sep 2007, 15:16
Das ging mir jetzt etwas schnell. Könntest du das Vorgehen noch mal etwas detaillierter beschreiben?

Aber ich habe noch Probleme mit deinem obigen Code. Ich habe jetzt ein Interface deklariert:
Delphi-Quellcode:
unit PluginInterface;

interface

uses
  uHYIntf;

type
  IPluginInterface = interface(IHYVisualPlugin)
    ['{D728C6B3-837B-4D40-AE99-A8FBD71D7CE8}']
    function GetVersion: String;
  end;

implementation

end.
Und dieses in meinen Plugin.dll Code eingebunden:
Delphi-Quellcode:
type
  THydraVisualPlugin = class(THYVisualPlugin, IPluginInterface)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  protected
  public
    function GetVersion: String;
  end;
Implementation:
Delphi-Quellcode:
function THydraVisualPlugin.GetVersion: String;
begin
  Result := '1.0';
end;
Aber in der Host-Anwendung muss ich jetzt das machen, um auf die Interfacemethode des Plugins zu zugreifen:
Delphi-Quellcode:
procedure TMainForm.btnLoadPlgClick(Sender: TObject);
begin
  with HYModuleManager1 do
  begin
    LoadModule(ExtractFilepath(ParamStr(0)) + 'HydraPluginLib.dll');
    CreateVisualPlugin('HydraVisualPlugin', FPluginForm);
    FPluginForm.ShowParented(pnlPluginArea);
    // FPlugin := FPluginForm as IPluginInterface; // löst AV aus beim Schliessen der Anwendung;
  end;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  // ShowMessage(FPlugin.GetVersion); // geht nicht, GetVersion unbekannt. FPlugin als IHYVisualPlugin deklariert
  ShowMessage((FPluginForm as IPluginInterface).GetVersion);
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Hydra 3.0 Plugin

  Alt 17. Sep 2007, 16:05
Ich habe es mal schnell in ein bestehendes Projekt eingebunden und habe kein Problem.

1. Das Interface

Delphi-Quellcode:
  
type

  IListBoxInterface = interface
      ['{2993CFD4-EC29-42C2-BB49-707C9A254B4F}']
   procedure SetEditField(Parent: TWinControl;Edit: TEdit);
   function GetVersion: String;
  end;

implementation

end.
2. Das Plugin

Delphi-Quellcode:
type
  TMyListBoxPlugin = class(THYVisualPlugin, IListBoxInterface)
    Edit1: TEdit;
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  protected
  public
    procedure SetEditField(Parent: TWinControl;Edit: TEdit);
    function Getversion: string;
  end;
Die Funktion selber:

Delphi-Quellcode:
function TMyListBoxPlugin.Getversion: string;
begin
  result := '1.0';
end;

Und der Aufruf im Host

Delphi-Quellcode:
 

var
  FListIfForm : IListBoxInterface;

with ModuleManager do begin
    // Loads the module
    LoadModule('VisualModule.dll');
    CreateVisualPlugin('MyListBoxPlugin', fListForm);
    FListIfForm := fListForm as IListBoxInterface;
    fListForm.ShowParented(Panel1);
Der Aufruf : Edit2.Text := FListIfForm.GetVersion;


Das entsorgen:

Delphi-Quellcode:
 
  FListIfForm := nil; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  ModuleManager.ReleaseInstance(fListForm);
  // Unloads the module
  ModuleManager.UnloadModules;
Der Fehler kommt, weil das Interface (eigene Referenzzählung) getrennt entsorgt werden muss.
Also den Referenzzeiger auf nil setzen und dann erst den Rest entsorgen.

Gruß Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:19 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