チュートリアル : .NET プラグイン モデルの公開
更新 : 2007 年 11 月
このチュートリアルでは、従来の Scribble MFC サンプルを拡張し、.NET テクノロジでプラグイン モデルをサポートする方法を示します。
MFC Scribble ソリューションは、.NET オブジェクト モデルを公開するように拡張されています。さらに、このサンプルでは、プラグイン アーキテクチャも公開します。このアーキテクチャを使用すると、.NET プラグインは MFC Scribble ソリューションとシームレスに対話できるようになります。
前提条件
ScribbleDotNET のサンプル : CLR 機能を使用した Scribble の拡張
このサンプルをビルドして実行するには
Visual Studio 開発環境で、Scribble.sln ソリューション ファイルを開きます。
[Debug] または [Release] のいずれかの構成を使用してソリューションをビルドします。
ソリューション エクスプローラで、ソリューション項目の plugins.xml を開きます。
plugins.xml ファイルで、Assembly 要素のパスの最初の部分を、ビルド時の構成に対応するように変更します。たとえば、[Debug] 構成を使用してビルドした場合は、"VBShapes.dll" を "Debug\VBShapes.dll" に、"CSPenColor.dll" を "Debug\CSPenColor.dll" に変更します。
ビルドした実行可能ファイルを実行します。
メニュー バーの [PLUGINS] をクリックします。
- [Draw Shapes] メニュー項目をクリックします。これにより、VBShapes プラグインが実行され、色の異なる正方形の外枠が 3 つ描画されます。
メニュー バーの [PLUGINS] をクリックします。
- [Change Pen Color] メニュー項目をクリックします。これにより、CSPenColor プラグインが実行され、.Net のカラー ダイアログでペンの色を選択できるようになります。
動作のしくみ
このサンプルは、次の 2 つの主要部分で実装されます。
プラグインの作成者が使用するオブジェクト モデルを公開する
2 つのメイン インターフェイスが、プラグイン モデルを実装するために公開されます (これらのインターフェイスの定義については、ScribbleApp プロジェクトを参照してください)。
IScribbleApp – このインターフェイスにより、プラグインの作成者が実行中の Scribble アプリケーションと対話できるようにする一連の機能が公開されます。このインターフェイスは、Scribble によって実装され (Scribble プロジェクトの ScribbleApp.cpp を参照)、実装されたインターフェイスのインスタンスは、次に説明する IScribblePlugin の Run() メンバ関数に渡されます。
IScribblePlugin – このインターフェイスは、プラグインの作成者によって実装されます。プラグインの作成者は、IScribbleApp によって公開された機能を使用して、そのプラグインを実装します。
プラグインを検索、読み込み、および実行するように基本の Scribble アプリケーションを拡張する
最初に、読み込むプラグインの一覧を含む XML ファイルが解析されます。見つかった各プラグインが読み込まれ、System.Reflection を使用して正しい型かどうかが検証されます。具体的には、リフレクションを使用して、プラグイン モジュールで公開された型を検索し、その型の 1 つが、公開した IPlugin インターフェイスを実装するようにします。この実装は、Scribble プロジェクトの PluginBld.cpp で確認できます。
次に、CScribbleApp は PluginBld.cpp によって実装されたルーチンを使用して、見つかったすべてのプラグインの一覧を取得します。この一覧に含まれる各プラグインに対して、[PLUGINS] メニューにメニュー項目が動的に作成されます。ユーザーが [PLUGINS] からメニュー項目を選択すると、適切なプラグインが実行されます。
使用したテクノロジ
XML を使用してプラグインの場所を指定する
リフレクションを使用して、XML ファイルで指定したプラグインの型が適切かどうかを検証する
プラグインを作成するオブジェクト モデルを定義する
C++ アプリケーションでプラグインを読み込んで実行する