このアーカイブは同期化されません。 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++ 言語のことを気にせずに
開発することが可能となるのである。