Ich arbeite gerade mit dem Plugin-System Hydra von RemObjects. Unter Delphi hab eich es schon geschafft Daten mittels eines Interfaces auszutauschen zwischen Plugin und Host-Anwendung.
Jetzt versuche ich das gleiche unter C#. Leider sind da die Beispiele etwas mager. Mein bisheriger Versuch sieht so aus:
Plugin-Interface:
Code:
using System;
using System.Collections.Generic;
using System.Text;
namespace HydraPluginHost
{
interface PluginInterface
{
string GetAuthor();
string GetVersion();
}
}
Plugin:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using RemObjects.Hydra;
using HydraPluginHost;
namespace HydraPlugin
{
[Plugin, VisualPlugin]
public partial class HydraPlugin : VisualPlugin, PluginInterface
{
public HydraPlugin()
{
InitializeComponent();
}
public string GetAuthor()
{
return "Michael Puff";
}
public string GetVersion()
{
return "0.1 [Demo]";
}
}
}
Laden des Plugin in der Host-anwendung:
Code:
private void lbPlugins_DoubleClick(object sender, EventArgs e)
{
try
{
// wenn leer dann raus
if (lbPlugins.SelectedIndex == -1) return;
if (lbPlugins.SelectedItem is PluginDescriptor)
{
// aktuelles Plugin entladen
currentPlugin = null;
hostPanel1.UnhostPlugin();
// neues Pluigin laden
currentPlugin = moduleManager1.CreateInstance(lbPlugins.SelectedItem as PluginDescriptor);
hostPanel1.HostPlugin(currentPlugin as IBasePlugin);
this.Text = (currentPlugin as PluginInterface).GetAuthor();
}
}
catch (
Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Compilieren tut er es ohne Fehler. Allerdings zur Laufzeit bekomme ich in der Zeile
this.Text = (currentPlugin as PluginInterface).GetAuthor(); den Fehler:
Zitat:
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Ich müsste wohl erst eine Objekt-Instanz von PluginInterface erzeugen. Aber da stehe ich jetzt etwas auf dem Schlauch, wie ich das mache.