Entering Passive Mode

2007-10 - カテゴリ 'C++/CLI' の記事

タイトルの一覧表示

Manager ができたので、これを使ってダイアログボックスに一覧表示するのだが、
プラグインには ISaver2 を実装していないものも存在する。

ISaver2 を実装している場合は Name プロパティを使えば良いが、
ISaver しか実装していない場合は、クラスの簡易名を使うことにしよう。
簡易名とは、名前空間を含まないクラスの名前部分のみを示す。

例えば、HelloSaver は ISaver2 を実装していないため、
クラス名である「HelloSaver」を名前として表示することになる。

設定ダイアログは Application::ConfigureProc で処理されているので、
WM_INITDIALOG メッセージを拾ってコンボボックスに設定する。

プラグインのロードと列挙

プラグインのロードはManager クラスのコンストラクタで行う。

手順としては、plugin フォルダの内部からアセンブリを探し、順にロードする。
そして、ロードしたアセンブリの中から、ISaver 実装型を検索するという流れだ。

Manager マネージクラス

プラグインとなるアセンブリはできたが、
それをホストが見つけて読み込むためには、
プラグインの登録方法をルール化しなければならない。

今回は、ホストのあるフォルダに「plugins」サブフォルダを作成し、
その中にアセンブリを放り込むというルールにしよう。

早速、HelloSaver.dll と HelloSaver2.dll を放り込む。

+ scrhost.scr
+ plugins\
+ HelloSaver.dll
+ HelloSaver2.dll

HelloSaver2

HelloSaver を修正して ISaver2 を実装させても良いのだが、
以前作った HelloSaver(HelloSaver.dll)はそのまま残しておき、
新たに ISaver2 を実装した HelloSaver2 を作る。

これを HelloSaver2.dll という名前でビルドすれば、
旧コードベースの HelloSaver.dll と、新しい HelloSaver2.dll を
混在させた状態でテストすることができるだろうし。

スクリーンセーバのタイトル

スクリーンセーバーを選択するリストボックスには何を表示すれば良いか。

スクリーンセーバーは ISaver を実装するクラスなのだが、
現在の ISaver には、特別なプロパティがないため、
クラスの FQCN くらいしか名前として使えそうなものがない。

そこで、ISaver に名前を得るためのプロパティ 'Name' を追加して、
ISaver を実装するクラスから名前を取得する事ができるようにする。
そして、ホストではこれをリストボックスに表示するようにしよう。

ただし、インタフェースを変更するのは御法度だ。
開発用ライブラリ「Loafer.ScreenSaver.dll」を既にリリースしていた場合、
既存のスクリーンセーバーは古い ISaver を実装してコンパイルされている。

このページのトップへ戻る
© 2008 Project Loafer/Project Fireball and all blog writers. Powered by Nucleus CMS