【環境】

Prea GT-30用のVisualStudio2008上のC++で作ったプログラム。
ダイアログベースタイプのプログラム。

gt30

【状況】

Canon Prea GT-30用のプログラムを修正(KT2からの修正)をした。
無事移行できたと安心していたがあまかった。

たまに「Debug Assertion Faild!」というエラーメッセジが出るのだ。
発生場所は、winhand.cpp Line:218である。
開発中は発生しなかったが、実際の運用の中で月に1,2回、ごく稀にここで止まってしまうのだ。なお、再現性は確認できなかった。ハンディのリセット後、同じ操作をしても問題は発生しなかった。

デバッグ用のEXEで運用していたため、このことが分かったのだが、リリース用のEXEだとメッセージがでないので、ハングアップしたように見える。
またハングアップした際には、画面のフォントが、設定したものではなく、ダイアログ標準の大きさになっている。私の場合は12ポイントで表示されるべきのところが、10ポイントぐらいで表示されていた。

【解決方法】

月に1,2回の発生なので、まだ直ったと断言できないが、ググってみると、同じ問題は他の環境でも発生しているようで、dc->DeleteDC()ではなく、ReleaseDC(dc);を使えばいいと書かれていた。
このコードは、フォントを作成するときによく使われている。

CDC* dc = GetDC();
CSize spaceSize = dc->GetTextExtent(" ");
//dc->DeleteDC(); //これがいけない
ReleaseDC(dc); //これに修正する。

とりあえず修正したデバッグ用のEXEを配布して様子をみることにした。
これで直らなかっらまた報告しますね。