2007 年 9 月 1 日 17 時 40 分

ホストの作成 #6: 連携テスト


このアーカイブは同期化されません。 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 アセンブリを呼び出し、
相互に運用できていることが確認できた。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.