Entering Passive Mode

< 1 2 3 4 5 6 7 8 9... >

Java とオーバーフロー

今日はネタをひとつ。以下のプログラムを実行すると、
標準出力には何が出力されるだろうか。

public class Test {
  static public void main(String[] args) {
    System.out.println((long)(80000 * 90000));
  }
}

これを即答できた人は、今日の日記に用はない。

再開

ちょいとばたばたしてたけど、
あまり間をあけるとダレそうなので、
ぼちぼち書いていこうと思います。

ペースは上がらないだろうがね。

忘年会

酒席に参加する文化が廃れてきているのは寂しいが、
残ったのは、やはり勝手知ったる仲間たち。
いやぁ。久々に楽しい忘年会やった。
次回はもっと人が増えることを願いつつ、
皆の来年の幸福を祈り、よいお年を!

以上。ほろ酔いの kes でした。

プラグイン固有の設定画面の表示

「設定」ボタンも Application::ConfigureProc で処理されるので、
IDC_CONFIGURE 向けの WM_COMMAND メッセージを処理すればよい。

プラグイン用の設定画面の呼び出しも、一覧表示と同じように作る。
ConfigureProc メソッドをマネージにしないように、
ConfigurePlugin という名前のヘルパメソッドに分離する。

msclr::gcroot 構造体テンプレート

ISaver 実装型一覧に表示できるようになったので、
次は「設定」ボタンで設定画面を呼び出せるようにしたい。

設定画面を呼び出すには、設定ボタンを押した際に、
コンボボックスに選択されている名前に対応した
ISaver 実装型のインスタンスを作れば良いのだ。

コンボボックスに CB_GETCURSEL メッセージを送れば、
現在選択されている項目のインデックス(数値)が得られるので、
その数値を元に Manager クラスのインデクサから Type を得れば良い。

タイトルの一覧表示

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 を実装してコンパイルされている。

< 1 2 3 4 5 6 7 8 9... >
このページのトップへ戻る
© 2008 Project Loafer/Project Fireball and all blog writers. Powered by Nucleus CMS