2007 年 8 月 22 日 17 時 29 分

プラグインモデルと C++/CLI


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


モジュール分割をするにあたって、
もう一つ C++/CLI という面白い技術を取り入れてみよう。

C++/CLI とは、C++ 言語を拡張し、
CLI (共通言語基盤)に対応した言語である。

C++/CLI を使えば、Visual Basic.NET や C# と同じように、
C++ 言語の構文を使ってアセンブリを作成することができる。
もちろん、.NET Framework を使うこともできるし、
C# 等で作ったクラスライブラリを参照することもできる。

驚いたことに、C++/CLI は、CLI や C# と並んで、
Ecma International によって標準化されている。
(C++/CLI は違うが、CLI や C# は ISO 標準でもある。)

つまり、単なる独自拡張のレベルではなく、
公式に認められたプログラミング言語なのである。

C++/CLI の大きな利点は、CLI 対応のクラスのみではなく、
ネイティブの C++ クラスを混在させることができることだ。

C++ による従来のプログラミング資産を生かしながら、
少しずつ CLI を使うコードに置き換えていけば、
徐々に CLI に移行させていくこともできるのである。

現在では、Visual Studio 2005 や Windows SDK に附属の
Microsoft C++ コンパイラにこの機能が付いている。

さて、C++/CLI とモジュール分割と組み合わせる狙いは、
以下のような事をしてみたいからである。

・結合モデルは、プラグインモデル。

・プラグインの方は C# や Visual Basic.NET で開発し、
 クラスライブラリのアセンブリとする。

・ホストの方は、scrnsave.lib を活用して簡単に作り、
 なおかつアセンブリであるプラグインを呼び出せるように、
 C++/CLI を使って作成する実行可能プログラムとする。

・ホストとプラグインの結合方法は、
 プラグインが実装すべきインターフェースを定め、
 クラスライブラリのアセンブリとして別途作成しておく。

プラグインモデルを採用した理由は、
scrnsave.lib を利用したいからだ。
scrnsave.lib には起動関数が含まれているので、
プラグインモデルでホスト側として使うしかない。

ホスト側で C++/CLI を利用することによって、
プラグインの方は、C++ 言語のことを気にせずに
開発することが可能となるのである。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.