12 月 24
今日もいそいそプログラミング… と。
OpenLibSys と CrystalCPUID の連携コードを書いている際に気が付いたことがあります。
WinRing0 には、RUN_TIME_DYNAMIC_LINKING と LOAD_TIME_DYNAMIC_LINKING それぞれに対応するライブラリ初期化ルーチンが付属しているのですが、RUN_TIME_DYNAMIC_LINKING 用の OlsApiInit.h を使用してライブラリの初期化を行っても、他のファイルから API を呼び出せないという問題があることに気がつきました。サンプルプログラムは、ひとつのダイアログで完結していたので気が付かなかった…。考えてみると当たり前なのですが。
OlsApiIni.h はグローバル空間に WinRing0 API を展開し初期化するため、他のファイルから API を呼び出すためには、extern “API 名” してあげないと参照できません。
例:GetDllStatus() の場合
typedef DWORD (WINAPI *_GetDllStatus) ();
extern _GetDllStatus GetDllStatus;
もちろん、OlsApiInitExtern.h を作って、extern しまくれば解決するわけですが…。英語で状況を説明してマニュアルを書くのは大変です。というわけで、仕様というか初期化ルーチンはオマケですから。
リンク方式の使い分け (MSDN) というわけで、複数のファイルから WinRing0 API を使用する場合は、暗黙的リンク (LOAD_TIME_DYNAMIC_LINKING) を推奨の方向で…。
【2007/12/24 11:12 追記】
OlsApiInitExt.h と OlsApiInitDef.h を作成し、RUN_TIME_DYNAMIC_LINKING においても、複数のファイルから WinRing0/OpenLibSys API を使用できるようにしました。サンプルプログラムも更新しなければならないので、何かのついでに更新したいと思います。
12 月 23
【本日の進捗】
- BIOS Information by WMI ダイアログを作成
- CPUID Information ダイアログを作成
- 各種拡張機能をモードレスダイアログ化
- CDHtmlDialogEx クラスを改良 (モードレスダイアログに対応)
- テーマ機能を実装(CrystalDiskMark 相当)
- 多言語対応機能を実装(CrystalDiskMark 相当)
- CrystalCpuidDlg.cpp を分割(テーマ機能と多言語対応機能を別ファイルへ)
【ひとりごと】
- CrystalCPUID 4.x よりは遥かに保守がしやすそう。
- 仮想関数の意味がようやく理解できたような気がする。
- 開発ブログっぽくなってきた。ような気がする。
【明日の目標】
- OpenLibSys との連携機能
- System Information by DMI
あたりの対応をがんばりたいと思います。OpenLibSys の Extension API 仕様はまだ全然考えていないのですが、とりあえずリンクして、一緒に動作するようにするところまでは進めたいと思います。そこまでできれば必要に応じて API を定義していくだけですからね。
12 月 23
多言語対応機能とテーマ機能(CrystalDiskMark 相当)を実装しました。
テーマ機能については、そのうち任意の背景画像に変更する機能を搭載するつもりです。

12 月 23
CPUID Information ダイアログを作成しました。リストコントロールを HTML + CSS で実現するのは大変(どこかから JavaScript のライブラリを探してこないとならない)なので、Windows 標準の CListCtrl を使用しています。適材適所ということで…。
一応、背景画像は利用できるので他のダイアログと同じようにうっすらと斜め線が入っています。

12 月 23
モードレスダイアログ機能を CDHtmlDialogEx に追加しました。必要に応じて処理を振り分けているので、モーダルダイアログにも対応しています。
メニューの有効・無効処理も含めたので、メインダイアログ側のコードがすっきりしました。どうして、こんな簡単なことに気が付かなかったのか > 当時の俺
とまぁ、当時の俺(修士 1 年の頃?)にツッコミを入れながら CrystalCPUID の開発は進められています。なんだか、CrystalCPUID のコード量は半分ぐらいになりそうだなあ…
12 月 23
BIOS Information by WMI ダイアログを作成しました。
WMI 情報を収集するクラスを作成したので、保守性が高まったような気がします。
また、昨日製作した CDHtmlDialogEx かなり良いです。まだ、バグがあるかもしれないのですぐに CrystalDiskMark に適用することは出来ませんが、適用すればコードが少しすっきりすると思います。

12 月 22
【本日の進捗】
- About ダイアログを作成
- Feature Flags ダイアログを作成
- CDHtmlDialogEx クラスを作成
共通処理を一括処理できるようになり、ソースコードの見通しがずっと良くなりました。
- F5 キーを入力するとダイアログが更新されテンプレートに使用している HTML ファイルがそのまま表示される問題を改善。(CrystalDiskMark にも同様の問題が存在するため、近日中に修正版をリリース予定)
【ひとりごと】
- 今回は、保守しやすいソースコードを目指しています。別にコメントをいっぱい書くということではなく、出来る限り簡潔にコーディングし、冗長な処理はまとめるように心がけています。当たり前のことではありますが、それができずに行き当たりばったりを積み重ねた結果 CrystalCPUID 4.x と CrystalMark 2004 については保守を断念するしかないほど破綻してしまったので。CrystalDiskMark はその反省を踏まえて書いたのですが、規模が小さすぎるので破綻もなにもないような気もします。
- 朝から晩までやってこれしか進まないとは情けない限りです…。とはいえ、骨格はだいぶ出来てきたので年内には顔見せリリースぐらいはしたいと思います。
【明日の目標】
- BIOS Information by WMI
- CPUID Information
- テーマ機能
- 多言語
あたりの対応をがんばりたいと思います。テーマ機能については、CrystalDiskMark + 背景選択機能を実装予定です。GUI で背景を変更できないと一般ユーザには使ってもらえませんからね。って、そこまで出来るかなぁ?
12 月 22
今日はこれから次々とダイアログをアップロードする予定。まずは、About Dialog です。
