アドインとアドオンの違い
普段何気なくソリューション、アドイン、アドオンなどという言葉を使っていますが、何が違うんでしょうか? 他にもプラグインというのもありますね。アドイン、アドオン、プラグインはアプリケーションの機能拡張のためのモジュールで、ソリューションはこうした機能拡張の総称、と考えていますが、どうでしょうか? VBA も機能拡張のためのソリューションといえますね。
ではアドインとアドオンの違いは何か? 話し言葉で使うときはほとんど意識したことがないのですが、実は大きな違いがあります。Visio は独自のアドオン形式を持っているので今回はこのあたりを紹介します。
まずアドオンから。アドオンは Visio の [ツール] メニューの中にありますから (隠れた機能があるところ)、一番耳慣れた言葉かもしれません。Visio アドオンと呼んでも差し支えありません。アドオンは以下の 2 つの形式があります。
VSL ファイル |
中身は DLL と変わらないのですが、Visio 独自のインターフェイスを使って動きます。 Visio のバージョン 2 時代から存在する形式で、データベースとの連携や色分け機能など Visio 標準搭載のアドオンはすべて VSL 形式です。Visio と同じプロセス内で動くのでパフォーマンスがよいという利点もあります |
EXE ファイル |
実行可能ファイルなので、単体起動をしてそこから Visio の様々な機能を呼び出すことが可能です。Visio とは別のプロセス内で動作するので、Visio とはプロセス間通信を行うためパフォーマンスが落ちます |
EXE は VB、C# でも開発可能なのが特徴です。前回 XML の埋め込み用に作ったものもアドオン EXE ですね。VSL は C++ での開発がベストです。
アドオンの一番の特徴は、シェイプシートから起動することができる点です。図形の右クリック メニューはもちろん、図形のドロップなどのイベントにあわせてアドオンでの処理に切り替えることができます。
アドインとは、実際には COM アドインのことです。通常の COM アドインと同様 IDTExtensibility2 インターフェースを使って実装するものです。Visio のプロセス内で動作するし、Visio の UI 上でオン オフを切り替えることもできます。COM をサポートする言語が多いので開発の方法も幅広い…いいことづくめのような気がしますが、1 点、大きなマイナス ポイントがあります。COM アドインはシェイプシートから呼び出すことができません。図形や図面のイベントと直接連動することができないのです。連動させるには、イベントを VBA で広い、VBA から COM アドインに渡す方法をとるのが一般的です。
さて、実際の開発にはこれまで何回か紹介してきた VS.NET と Visio SDK の組み合わせがベストです。SolutionXML の紹介の際に軽く流してしまいましたが、ウィザードでコンパイル可能なプロジェクトを作ることができます。VB.NET と C# だとウィザードの途中で Visio アドオンから COM アドインを選択し、
COM アドインを選んだ場合は起動方法も設定できる仕組みになってます (Load the add-in... を選択すると Visio の起動時に COM アドインが読み込まれます)。
Visio 開発者向けのニュースグループをみていると C# で VSL を作れないのか? という質問をよく見かけます。純粋には無理ですが、 C# のコンポーネントを呼び出す VSL を用意すれば、近いことはできるでしょう。 VBA から COM アドインを呼び出すのに似ていますが、アンマネージドである VSL とマネージドである C# コンポーネントの連携には Interop が発生するので C# や VB.NET で開発した COM アドイン (Visio PIA を経由) とパフォーマンスがあまり変わらないでしょう。デバッグが面倒になる分この方法のほうが不利ですね。
SDK の VS.NET 用 C++ のテンプレートでは VSL もサポートしているので、パフォーマンスを追及する C プログラマはこちらの利用をお勧めします。
<担当: M>
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。マイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません