Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

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

Plugin mit RemObjects Hydra oder Interfaces in C#

  Alt 15. Jan 2008, 13:47
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat