このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
まだ Configure メソッドしか作っていないが、
設定画面を表示させるコードは完成した。
描画用のコードを書いてないので、
スクリーンセーバーの実行テストはできないが、
とりあえず設定画面が表示されるか確認してみたい。
まずは、Dispatcher.cpp をコンパイルしておく。
$ cl /c /W4 /clr /FoDispatcher.obj Dispatcher.cpp
エラーがなければリンクする。
$ link /subsystem:windows /out:scrhost.scr /def:module.def ^
module.obj Application.obj Dispatcher.obj resource.res ^
kernel32.lib advapi32.lib user32.lib ^
gdi32.lib comctl32.lib scrnsave.lib
スクリーンセーバーのホストアプリケーションなので、
scrhost.scr という名前を付けることにした。
なんかウィルスっぽいけど、まぁええか。
どうせなので、別の機械に持って行ってテストしてみよう。
コピーしなければならないファイルは以下の 4 つ。
・Loafer.ScreenSaver.dll
・HelloSaver.dll
・scrhost.scr
・scrhost.scr.manifest
さて、リンクすると、scrhost.lib と scrhost.exp の他に、
scrhost.scr.manifest というファイルができたはずだ。
scrhost.scr.manifest はマニフェストファイルといい、
実行可能ファイルが依存している、
ライブラリに関する情報が格納されたファイルである。
Windows XP 以降で scrhost.scr を実行するためには、
scrhost.scr.manifest ファイルも持っていく必要がある。
これがないと、CLI 対応の C ランタイムを見つけられず、
ライブラリのロードに失敗して実行できないはずだ。
マニフェストファイルについては後日ちゃんとやるので、
今日の所は、黙って一緒にコピーすることにする。
では、コピーしたコンピュータ上で、
scrhost.scr を右クリックし「設定」を選ぶ。
「設定できるオプションがありません。」という
味気ないメッセージボックスが表示されれば成功だ。
scrhost.scr の持っているダミーのリソースの、
ダイアログボックスが表示されていないことも確認できた。
なお、Spy++ 等のツールを使えば、
ウィンドウの親子関係も正常であることも確認できる。
メッセージボックスを表示するコードは、
CLI アセンブリである HelloSaver.dll に存在する。
そのコードが呼び出されている事は間違いない。
簡単なテストではあるが、
C++ で作成されたホストアプリケーションが、
C++/CLI 経由で、純粋な CLI アセンブリを呼び出し、
相互に運用できていることが確認できた。