HOME     メール  

Links:

最近の投稿

カテゴリー

広告

サイト内検索

外部リンク

アーカイブ

広告

お知らせ

BattenX Ver2.02リリース

修正版です

1.IME ON文字列が表示されないアプリケーションやファイルダイアログがある問題を修正
2.スレッド生成関数の変更による終了処理における不具合を修正
3.設定ダイアログ以外の実行ファイルやDLL生成用コンパイラをVisualC++2010Expressに変更

1番目は具体的には秀丸のVer8ではIME ONが表示できなかったのが修正されたと言うことです。他のアプリケーションも表示できなかったのがあるかもしれません。
 しかし、タイトルバーに何も文字が表示されていないWindows7のエクスプローラやIE9.0では表示はできてもOFF時に消すことはできません。これはタイトルバーのリフレッシュ方法がわからないのでいかんともしがたい問題です。ちなみに現在行われているタイトルバーのリフレッシュ方法は、単にSetWindowsText()を使って表示し直しているだけです。

2番目は専門的なお話になりますが、Win32APIのCreateThread()を直接使っていると、WindowsSDKに付属のApplication Verifierというデバッグツール上でエラーと表示されてしまうのです。そこで_beginthreadex()という代替関数を使用しただけのことです。

Application Verifierでデバッグしているとき、今回判明した原因不明のエラーがあったのですが、実際使っている上では全く問題ないためリリースしていました。しかし、今回Fasie7のデバッグでBattenXがらみのエラーが入ってきて、Fasie7のデバッグをしている時、もしやと思って上述の関数に差し替えたらエラーは回避できるかと思って試したらその通りになったのです。

現在リリースしているFasie7でのエラーは情けないかな、明らかなバグがいくつも混入していることが判明し、現在それを修正したのですが、このデバッグをかなりつっこんでやったお陰でBattenXの方の以前から問題になっていたエラーも修正されました。

WindowsAPIのマルチスレッドの生成関数はCreateThreadというAPIなのですが、CやC++でプログラミングをする際、C言語のランタイムライブラリを必ずと言っていいほど使っているので、それを使っている限りはCのランタイムライブラリにある_beginthreadex()を使わなくてはダメなのです。
….そう私が相当昔に買った本には書かれてあります。しかしそれはVisualC++4.0時代の本で今は問題ないだろうとタカをくくっていました。またCのランタイムは使っていないと思っていましたから、大丈夫だろうと思っていました。しかし、実際にCランタイムの関数を書いたコードは無いにもかかわらず、API内部で呼び出しているものがあり事実上CreateThread()は使えないのです。

CreateThread()を使っていると、アプリケーション終了処理時に何らかのメモリリークが発生するのでしょう。

3番目は64bit実行ファイルビルド環境を構築するのが今まで使用していたVisualC++6.0ではできなくなったためです。やろうと思えばバックアップファイルにある昔のVC++6.0用SDKでできるのですが、最近のExpress版の方が正式に64bit実行ファイルビルド環境に対応していますので簡単です。

Windows8対応ですが、今回の不具合修正の方を優先しました。また今回の修正でWindows8にも対応している可能性があります。
 Windows8はキーアサイン変更したキーを押したとき即座にエラーを返してきます。BattenXはキーアサイン変更したキーを送出する際にスレッドを生成しますので、今回のスレッド生成関数の差し替えによって、事実上修正されているかもしれません。修正されていれば儲けもんですが、わざわざ確かめようとまではいきませんでした。無料で体験版を手に入れられるとは言っても新たにディスクを用意するか、既存OSを消してまでインストールする程のOSとは思えないからです。

一方Windows7は致命的なエラーが起こってもいったん見過ごして、アプリケーションの終了後に言ってきます。しかも自分のソフトを開発途中のバージョンでは、終了後数十秒たって忘れた頃に言ってくるので非常に悩ましいし精神衛生上よくありません。エラーならエラーになった時点で即座に言ってもらいたいものです。Windows7はそういう点で女性的というか、ユーザにエラーを逐一報告するのは無粋だから見逃した方がいいという意向があってそうしているのかもしれません。シャットダウン時だけにいつも妙なエラーばかり言ってくるのも、そのような配慮からなのかもしれません。

それに比べればWindows8(正確にはリリースプレビュー版ですが)や、かつてのWindows2000は男性的で、作る側としてはすぐにエラーを指摘してくれてありがたいです。