2007 年 8 月 16 日 23 時 50 分

scrnsave.lib の使い方


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


scrnsave.lib を使ってスクリーンセーバーを作る場合、
C 言語を使った開発となるため、以下の用意が必要である。

・scrnsave.lib (Platform SDK 等)
・Microsoft 製の C コンパイラ(Visual C++ 等)

Express 版以外の Visual C++ があれば、
それだけで開発環境が十分に揃う。
Platform SDK のインストールは多分不要だが、
最新版のライブラリを使いたいなら入れておけば良い。

また、製品を購入してなくても、
上記の環境を無料で揃えることができる。

最近リリースされた Platform SDK は、
Windows SDK という名前になり、
scrnsave.lib を含む各種ライブラリだけでなく、
C クロスコンパイラが含まれている。
そのため、これ 1 つで開発が可能となっている。

http://www.microsoft.com/downloads/details.aspx?FamilyID=7614FE22-8A64-4DFB-AA0C-DB53035F40A0&displaylang=ja

もし IDE(統合開発環境)が必要なら、これまた無料の、
Visual C++ 2005 Express Edition を入れれば良い。
これだけでは scrnsave.lib 等、API 開発ができないので、
Windows SDK や Platform SDK を別途入れる必要がある。

http://www.microsoft.com/japan/msdn/vstudio/express/visualc/

時代の流れだろうか。こういった開発ツールが、
無料で提供されるようになるのは非常にありがたいことだ。
個人や中小企業での開発においては、
Visual C++ 2005 Express Edition の機能で十分である。

さて、scrnsave.lib の話に戻ろう。

scrnsave.lib は特殊なライブラリである。
拡張子こそインポート(参照)ライブラリと同じ lib だが、
これはコードを含むスタティックリンクライブラリである。

スタティックリンクライブラリは、
オブジェクトモジュールの一種であり、
幾つかのソースコードをコンパイルして作成された、
オブジェクトコードをまとめたものだ。

そのままではロードも実行もできない部品なので、
EXE/DLL にリンクして埋め込んで利用する。

// 情報処理技術者試験的(笑)には
//
// スタティックリンクライブラリは、
// 目的モジュールの一種であり、
// 幾つかの原始プログラムを翻訳して作成された、
// 目的プログラムをまとめたものだ。
//
// そのままではロードも実行もできない部品なので
// ロードモジュールに連係編集して埋め込んで利用する。

scrnsave.lib を使うということは、
既存の読み取り専用ソースコード scrnsave.c を、
一緒にコンパイルしてリンクするような感じである。
一部の処理を既に作成済みと考えれば良いのだ。

ただし、lib ファイルはコンパイル済みであるため、
その内容を修正することはできず、
そのソースコードの内容も参照することができない。

なので、scrnsave.lib の内容と、
利用者が書くコードの間で矛盾が起きないように、
うまく連携する必要がある。

では、何をどう書けば良いのか。

まず、scrnsave.lib の内容については、
scrnsave.h というヘッダファイルに記述があるので、
このヘッダを参照すれば、色々と説明が書いてある。

scrnsave.lib の最大の特徴は、その中に、
実行ファイルの起動関数の WinMain が含まれていることだ。
すなわち、自分のソースコードに WinMain は必要なく、
実行は、scrnsave.lib の中から開始することになる。

scrnsave.lib はコマンド引数の処理や、
プラットフォーム依存の初期化など、
スクリーンセーバーに必要なほとんどの処理を行ってくれる。

そして、設定画面やスクリーンセーバーの描画などを、
利用者が自由に制御できるように、
必要に応じて以下の 3 関数を呼び出すようになっている。

・BOOL WINAPI RegisterDialogClasses(HANDLE hInst);
・BOOL WINAPI ScreenSaverConfigureDialog(
        HWND hDlg, UINT message,
        WPARAM wParam, LPARAM lParam);
・LRESULT WINAPI ScreenSaverProc(
        HWND hWnd, UINT message,
        WPARAM wParam, LPARAM lParam);

scrnsave.lib ではこれら関数が参照されており、
その実体を利用者が定義していることを前提としている。
そのため、これら関数を用意する必要がある。

また、scrnsave.lib は特別なリソースも参照する。

・ID が IDS_DESCRIPTION (1) の文字列
・ID が ID_APP (100) のアイコン
・ID が DLG_SCRNSAVECONFIGURE (1002) のダイアログ

上記 3 関数と 3 リソースを用意すれば、
スクリーンセーバーが作成できるというわけだ。



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