Freigeben über


Exemplarische Vorgehensweise: Verfügbarmachen eines .NET-Plug-In-Modells

Diese exemplarische Vorgehensweise veranschaulicht, wie mit .NET-Technologien das klassische MFC-Beispiel Scribble um die Unterstützung für ein Plug-In-Modell erweitert werden kann.

Die MFC-Scribble-Projektmappe wird so erweitert, dass sie ein .NET-Objektmodell zur Verfügung stellt. Außerdem macht das Beispiel eine Plug-In-Architektur verfügbar, mithilfe derer .NET-Plug-Ins nahtlos mit der MFC-Scribble-Projektmappe interagieren können.

Vorbereitungsmaßnahmen

ScribbleDotNET-Beispiel: Erweitern der Scribble-Anwendung um CLR-Features

So erstellen Sie dieses Beispiel und führen es aus

  1. Öffnen Sie die Projektmappendatei Scribble.sln in der Visual Studio-Entwicklungsumgebung.

  2. Erstellen Sie die Projektmappe entweder mit der Konfiguration Debug oder mit der Konfiguration Release.

  3. Öffnen Sie im Projektmappen-Explorer das Projektmappenelement plugins.xml.

  4. Ändern Sie in der Datei plugins.xml im Assemblyelement den ersten Teil des Pfades, so dass dieser mit der beim Erstellen verwendeten Konfiguration übereinstimmt. Ändern Sie zum Beispiel "VBShapes.dll" in "Debug\VBShapes.dll" und "CSPenColor.dll" in "Debug\CSPenColor.dll", wenn Sie die Debug-Konfiguration verwenden.

  5. Führen Sie die erstellte ausführbare Datei aus.

  6. Wählen Sie in der Menüleiste Plug-In-Komponenten aus.

    1. Wählen Sie das Menüelement Formen zeichnen aus. Dadurch wird das VBShapes-Plug-In ausgeführt, das die Umrisse dreier verschiedenfarbiger Quadrate zeichnet.
  7. Wählen Sie in der Menüleiste Plug-In-Komponenten aus.

    1. Wählen Sie das Menüelement Stiftfarbe ändern aus. Dadurch wird das CSPenColor-Plug-In ausgeführt, und Sie können in einem Farbdialogfeld von .NET die Stiftfarbe auswählen.

Funktionsweise

Dieses Beispiel ist in zwei Hauptteilen implementiert:

  1. Verfügbarmachen eines Objektmodells zur Verwendung durch Plug-In-Entwickler

    Zur Implementierung des Plug-In-Modells werden zwei Hauptschnittstellen zur Verfügung gestellt (Definitionen dieser Schnittstellen finden Sie im ScribbleApp-Projekt):

    • IScribbleApp: Diese Schnittstelle stellt bestimmte Features zur Verfügung, die der Plug-In-Entwickler zur Interaktion mit einer Scribble-Anwendung verwenden kann, während sie ausgeführt wird. Die Schnittstelle wird durch Scribble implementiert (siehe ScribbleApp.cpp im Scribble-Projekt). Eine Instanz der implementierten Schnittstelle wird an die Memberfunktion Run() von IScribblePlugin übergeben, das als Nächstes erläutert wird.

    • IScribblePlugin: Diese Schnittstelle wird vom Plug-In-Entwickler implementiert. Der Plug-In-Entwickler kann die von IScribbleApp zur Verfügung gestellten Features zur Implementierung des Plug-Ins verwenden.

  2. Erweitern der Scribble-Basisanwendung um die Fähigkeit, Plug-Ins zu suchen, zu laden und auszuführen

    • Zuerst wird eine XML-Datei analysiert, die eine Liste der zu ladenden Plug-Ins enthält. Jedes gefundene Plug-In wird geladen und unter Verwendung von System.Reflection daraufhin überprüft, ob es den richtigen Typ hat. Genauer gesagt werden mithilfe der Reflektion alle vom Plug-In-Modul zur Verfügung gestellten Typen untersucht, um sicherzustellen, dass einer dieser Typen die IPlugin-Schnittstelle implementiert, die verfügbar gemacht wurde. Die zugehörige Implementierung befindet sich im Scribble-Projekt in der Datei PluginBld.cpp.

    • Anschließend verwendet CScribbleApp die in PluginBld.cpp implementierten Routinen, um eine Liste aller gefundenen Plug-Ins zu erhalten. Für jedes Plug-In in dieser Liste wird im Menü Plug-In-Komponenten ein Menüelement dynamisch erstellt. Wenn der Benutzer im Menü Plug-In-Komponenten ein Menüelement auswählt, wird das entsprechende Plug-In ausgeführt.

Verwendete Technologien

  • Verwenden von XML, um den Speicherort der Plug-Ins anzugeben

  • Verwenden von Reflektion, um zu überprüfen, ob das in der XML-Datei angegebene Plug-In vom richtigen Typ ist

  • Definieren eines Objektmodells für das Erstellen von Plug-Ins

  • Laden und Ausführen des Plug-Ins in einer C++-Anwendung

Siehe auch

Aufgaben

SCRIBBLE-Beispiel: MDI-Zeichenanwendung von MFC