チュートリアル : .NET プラグイン モデルの公開

更新 : 2007 年 11 月

このチュートリアルでは、従来の Scribble MFC サンプルを拡張し、.NET テクノロジでプラグイン モデルをサポートする方法を示します。

MFC Scribble ソリューションは、.NET オブジェクト モデルを公開するように拡張されています。さらに、このサンプルでは、プラグイン アーキテクチャも公開します。このアーキテクチャを使用すると、.NET プラグインは MFC Scribble ソリューションとシームレスに対話できるようになります。

前提条件

ScribbleDotNET のサンプル : CLR 機能を使用した Scribble の拡張

このサンプルをビルドして実行するには

  1. Visual Studio 開発環境で、Scribble.sln ソリューション ファイルを開きます。

  2. [Debug] または [Release] のいずれかの構成を使用してソリューションをビルドします。

  3. ソリューション エクスプローラで、ソリューション項目の plugins.xml を開きます。

  4. plugins.xml ファイルで、Assembly 要素のパスの最初の部分を、ビルド時の構成に対応するように変更します。たとえば、[Debug] 構成を使用してビルドした場合は、"VBShapes.dll" を "Debug\VBShapes.dll" に、"CSPenColor.dll" を "Debug\CSPenColor.dll" に変更します。

  5. ビルドした実行可能ファイルを実行します。

  6. メニュー バーの [PLUGINS] をクリックします。

    1. [Draw Shapes] メニュー項目をクリックします。これにより、VBShapes プラグインが実行され、色の異なる正方形の外枠が 3 つ描画されます。
  7. メニュー バーの [PLUGINS] をクリックします。

    1. [Change Pen Color] メニュー項目をクリックします。これにより、CSPenColor プラグインが実行され、.Net のカラー ダイアログでペンの色を選択できるようになります。

動作のしくみ

このサンプルは、次の 2 つの主要部分で実装されます。

  1. プラグインの作成者が使用するオブジェクト モデルを公開する

    2 つのメイン インターフェイスが、プラグイン モデルを実装するために公開されます (これらのインターフェイスの定義については、ScribbleApp プロジェクトを参照してください)。

    • IScribbleApp – このインターフェイスにより、プラグインの作成者が実行中の Scribble アプリケーションと対話できるようにする一連の機能が公開されます。このインターフェイスは、Scribble によって実装され (Scribble プロジェクトの ScribbleApp.cpp を参照)、実装されたインターフェイスのインスタンスは、次に説明する IScribblePlugin の Run() メンバ関数に渡されます。

    • IScribblePlugin – このインターフェイスは、プラグインの作成者によって実装されます。プラグインの作成者は、IScribbleApp によって公開された機能を使用して、そのプラグインを実装します。

  2. プラグインを検索、読み込み、および実行するように基本の Scribble アプリケーションを拡張する

    • 最初に、読み込むプラグインの一覧を含む XML ファイルが解析されます。見つかった各プラグインが読み込まれ、System.Reflection を使用して正しい型かどうかが検証されます。具体的には、リフレクションを使用して、プラグイン モジュールで公開された型を検索し、その型の 1 つが、公開した IPlugin インターフェイスを実装するようにします。この実装は、Scribble プロジェクトの PluginBld.cpp で確認できます。

    • 次に、CScribbleApp は PluginBld.cpp によって実装されたルーチンを使用して、見つかったすべてのプラグインの一覧を取得します。この一覧に含まれる各プラグインに対して、[PLUGINS] メニューにメニュー項目が動的に作成されます。ユーザーが [PLUGINS] からメニュー項目を選択すると、適切なプラグインが実行されます。

使用したテクノロジ

  • XML を使用してプラグインの場所を指定する

  • リフレクションを使用して、XML ファイルで指定したプラグインの型が適切かどうかを検証する

  • プラグインを作成するオブジェクト モデルを定義する

  • C++ アプリケーションでプラグインを読み込んで実行する

参照

処理手順

SCRIBBLE サンプル : MFC MDI 描画アプリケーション