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 相当)を実装しました。

テーマ機能については、そのうち任意の背景画像に変更する機能を搭載するつもりです。

crystalcpuid5_08.png

12 月 23

CPUID Information ダイアログを作成しました。リストコントロールを HTML + CSS で実現するのは大変(どこかから JavaScript のライブラリを探してこないとならない)なので、Windows 標準の CListCtrl を使用しています。適材適所ということで…。

一応、背景画像は利用できるので他のダイアログと同じようにうっすらと斜め線が入っています。

crystalcpuid5_07.png

12 月 23

モードレスダイアログ機能を CDHtmlDialogEx に追加しました。必要に応じて処理を振り分けているので、モーダルダイアログにも対応しています。

メニューの有効・無効処理も含めたので、メインダイアログ側のコードがすっきりしました。どうして、こんな簡単なことに気が付かなかったのか > 当時の俺

とまぁ、当時の俺(修士 1 年の頃?)にツッコミを入れながら CrystalCPUID の開発は進められています。なんだか、CrystalCPUID のコード量は半分ぐらいになりそうだなあ…

12 月 23

BIOS Information by WMI ダイアログを作成しました。

WMI 情報を収集するクラスを作成したので、保守性が高まったような気がします。

また、昨日製作した CDHtmlDialogEx かなり良いです。まだ、バグがあるかもしれないのですぐに CrystalDiskMark に適用することは出来ませんが、適用すればコードが少しすっきりすると思います。

crystalcpuid5_05.png

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

Feature Flags 機能を実装しました。

【ひとりごと】

  • 機能の移植自体は簡単だったのですが、全然関係ないところで苦戦してしまいました。 
  • DHTML 用のイベントハンドラは、
    HRESULT OnFeatureFlagStdEcx(IHTMLElement* /*pElement*/)
    という形式になるのですが、何故か手動で
    void OnFeatureFlagStdEcx()
    の形式で作ってしまいました。すると、関数自体は呼び出せるのですが、クラスメンバ変数にすらアクセス出来ない状態に。デバッガで追いかけても原因がわからず、CrystalDiskMark の実装と比較しながら調査を行ったところ、上記のイベントハンドラの形式に問題があることに気が付いたわけです。浪費時間は3時間ぐらい。
  • というわけで、朝から晩までプログラム書いているのに、About / Feature Flags ダイアログしか作れませんでした。まぁ、じっくりのんびり移植していきますよ。
  • 今回は、CStringArray を使って少ない行数でまとめてみました。CrystalCPUID 4.x よりは遥かにマシでしょう。
  • もちろん、デザインは最終版ではありません。

crystalcpuid5_03s.png

12 月 22

今日はこれから次々とダイアログをアップロードする予定。まずは、About Dialog です。

crystalcpuid5_02.png

12 月 21

【ひとこと】

  • CrystalEarthKeeper がらみで方針が二転三転しましたが、結局 CrystalCPUID 5.1 に全て統合することにしました。CrystalCPUID 4.x よりは遥かにまともなプログラムになる予定です。 
  • CrystalDiskMark に比べてメインダイアログが複雑なのでそれなりに苦戦中です。
  • 年内には、ソースコードを出しながら開発できる状態にもっていきたいところです。

【進捗】

  • CrystalDiskMark から CDHtmlDialog 初期化周り(多言語対応・テーマ機能)の移植を行いました。
  • とりあえず、HTML + CSS で仮のデザインを作成しました。
    - 色々情報が表示されていますが、テキストで埋め込んでいるだけです。

【現在の開発状況】

  • CrystalCPUID 5 (Estel)
    - GUI : 3%
    - 各種拡張機能の移植: 0%
    - EarthKeeper : 0%
    - テーマ変更機能: 20%
    - 言語切り替え機能: 50%
  • OpenLibSys (PureCrystal)
    - Extension API : 0 %
    - Core API : 100 % (compatible with WinRing0)
    - Device Driver : 100 % (compatible with WinRing0)

crystalcpuid5_01.png