あまり芳しくなかったですね。久々にWindows 10をクラッシュさせるバグを出し、OSからMicrosoftへ2回ほど異常報告がチクられました。(ヤレヤレ。)

 

そのバグ退治に難儀をして、途中で嫌気がさして投げ出してブログを更新しませんでした。すみません。

 

前にも書きましたが、デバッガーのないBCC102のデバッグ環境は最悪で、私の作法は「(ここら辺に悪さをする奴がいるだろうと思われるところの前後に)MessageBoxのトラップを仕掛け」て異常発生個所を特定してゆきます。今回の場合、異常終了の状態からメインプログラムの処理((プロジェクト名)Proc.hの部分)部分を想定しましたが、それがクラス定義のヘッダーファイルに及び、そこいら中トラップだらけ状態で嫌気がさした、という訳です。

 

結局エラーの原因は、CALBUMというクラスの仕様変更を行い、似たようなイメージ表示用のメンバー関数のうち一つはゼロ初期化されたポインター配列変数m_Photo[]がゼロのままか否かで未生成かどうかをチェックするようにしましたが、もう一つの関数は仕様変更前のm_PhotoクラスのImageオブジェクト変数m_Imageが生成されているか否かのチェックのままであったために「(m_Photo[n]が未生成の場合)ゼロポインターが参照するm_Image変数を取ってこい」という命令となり、当然のことながらシステム領域に違法侵入することとなった次第です。(以下は該当部分-ご参考迄)

//イメージの表示(x, yからw幅、h高さの矩形に原寸表示比率で表示)
bool CALBUM::ShowImg(int x, int y, int w, int h) {

    if(!m_Photo[m_Selected])    //エラー対応
        return FALSE;

//イメージの表示(第1引数TRUE左上、FALSE中央、第2引数TRUE原寸、FALSEサイズ調整)
bool CALBUM::ShowImg(bool lefttop, bool asis) {

    if(!m_Photo[m_Selected]->m_Image)    //エラー対応 (解説:こいつが悪さをしていました)
        return FALSE;

 

エラーを回避する為の条件文がエラーの原因だった、ということで洒落にもなりません。しかし、このようにCやC++言語は、いかに高度な機構を取り入れたといっても、アセンブラーに近い「低級」言語の性格を持っているのでプログラマーとしては「怖くて」楽しいともいえると思います。いずれにしても一歩前進となりました。

 

さて、話がそれましたが、現在開発しているのは「PC内に分散、散らかった状態になっている種々のイメージファイルを纏めるアルバムソフト」でして、

 

「現実のアルバムのように、空白状態の冊子(CALBUMクラスをベースとしたメインウィンドウ)に写真(GDI+に基づくCPHOTOクラスのイメージ)を加えていって一冊のアルバムとなり、一つのアルバム(*.albファイル)を開くと、見開きに写真が並び(サムネイル表示)、その一つを取ってみると(単一イメージ表示へ切り替え)大きく表示され、裏を見ると備考を読むことができる(単一表示モードでテキストデータをダイアログ表示する)という基本仕様」

 

にしています。このようなソフトを思いついたのは、5年ほど前から自分で作った料理の写真を残しているのですが、それにコメントを付けて一つにまとめたかったからです。「Win10に標準添付のMicrosoftフォト等、イメージを表示するソフトは色々とあるけど、異なる種類のファイルを纏めてアルバムのように管理するソフトってないから」と思っていたのですが、Microsoftフォトをよくよく見たら「+追加先」というのが左上にあり、クリックすると「新しいアルバム」とあったので、このようなアルバム処理ができるんだと今日初めて知りました

 

そりゃ、Microsoftだもん、当ったり前だよねっ!