最近の記事
- 4/22 - 思い出の紙時計
- 3/29 - さくらインターネットの VPS リニューアル
- 3/19 - SSHD への攻撃を分析してみた
- 3/9 - キーボードの過酷さ
- 3/8 - .NET のパフォーマンスについて
- 3/7 - phpMyAdmin への攻撃
- 3/1 - ミイラ取りがミイラになりかけた
- 2/22 - URL を知らなければ安全だと?
- 2/16 - 決意
- 1/30 - ルーターの UPnP 対応状況
Entering Passive Mode
Manager ができたので、これを使ってダイアログボックスに一覧表示するのだが、
プラグインには ISaver2 を実装していないものも存在する。
ISaver2 を実装している場合は Name プロパティを使えば良いが、
ISaver しか実装していない場合は、クラスの簡易名を使うことにしよう。
簡易名とは、名前空間を含まないクラスの名前部分のみを示す。
例えば、HelloSaver は ISaver2 を実装していないため、
クラス名である「HelloSaver」を名前として表示することになる。
設定ダイアログは Application::ConfigureProc で処理されているので、
WM_INITDIALOG メッセージを拾ってコンボボックスに設定する。
プラグインのロードはManager クラスのコンストラクタで行う。
手順としては、plugin フォルダの内部からアセンブリを探し、順にロードする。
そして、ロードしたアセンブリの中から、ISaver 実装型を検索するという流れだ。
プラグインとなるアセンブリはできたが、
それをホストが見つけて読み込むためには、
プラグインの登録方法をルール化しなければならない。
今回は、ホストのあるフォルダに「plugins」サブフォルダを作成し、
その中にアセンブリを放り込むというルールにしよう。
早速、HelloSaver.dll と HelloSaver2.dll を放り込む。
+ scrhost.scr
+ plugins\
+ HelloSaver.dll
+ HelloSaver2.dll
HelloSaver を修正して ISaver2 を実装させても良いのだが、
以前作った HelloSaver(HelloSaver.dll)はそのまま残しておき、
新たに ISaver2 を実装した HelloSaver2 を作る。
これを HelloSaver2.dll という名前でビルドすれば、
旧コードベースの HelloSaver.dll と、新しい HelloSaver2.dll を
混在させた状態でテストすることができるだろうし。
スクリーンセーバーを選択するリストボックスには何を表示すれば良いか。
スクリーンセーバーは ISaver を実装するクラスなのだが、
現在の ISaver には、特別なプロパティがないため、
クラスの FQCN くらいしか名前として使えそうなものがない。
そこで、ISaver に名前を得るためのプロパティ 'Name' を追加して、
ISaver を実装するクラスから名前を取得する事ができるようにする。
そして、ホストではこれをリストボックスに表示するようにしよう。
ただし、インタフェースを変更するのは御法度だ。
開発用ライブラリ「Loafer.ScreenSaver.dll」を既にリリースしていた場合、
既存のスクリーンセーバーは古い ISaver を実装してコンパイルされている。