Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MSCOMM_ONCOMMが(時々)動かない

2 views
Skip to first unread message

Yuuichi Naruoka

unread,
May 1, 2007, 3:20:36 AM5/1/07
to
 成岡@DTI静岡です。前回質問した時のプログラム(winXP & VB5)がまだトラブっ
てます。

 外部との通信にシリアルポートを用いており、受信時の処理にはMSCOMM_ONCOMMを
用いているのですがこれが“時々”動かなくなるのです。これがまた不可解な状況
で、Form上のボタンを押すと「先にシリアル受信時の処理を行ってから」押した
ボタンの処理を行うとのこと。
# 現場には他の人が行ってインストール等を行っているので私は実際の機器は
# 見ていないのです。

 この不思議な状況から以下のような感じになっていると思われます。
・ シリアルポートの受信バッファには受信文字列がちゃんと残っている。
・ イベントキューにも受信イベントは残っている。
・ にも関わらずMSCOMM_ONCOMMが時々動かない。
・ ボタンを押すなど“次のイベントを発生させる”とキュー内に残っている受信
 イベントが押し出される形で実行される。

 更に厄介なのは、このプログラムはいくつかあるバージョンの「途中のもの」なの
ですが、「最新バージョン」は通信部分(特にMSCOMM_ONCOMMの中身)は“全く
同じ”なのにも関わらずこのような現象は起こっていないのです。なのでVBの問題と
言うよりハードの設定の問題なのかな、とも思うのですが手元でこの現象を再現でき
ないこともあり、困っています。

 一応気が付いたことを書くと、Form上でMSFlexGridを使っているのですがトラブル
バージョンではenableがTrueになっていたのに対し最新版ではFalse になっていた
ことぐらいです。このMsFlexGridの挙動自体おかしかったので、もしかしてこれが
原因かもとも思いFalse に修正したものを客先に送ったのですがまだ返事は来て
いません。

 ずっと昔に同じような経験をしたこともあり、ネット上で検索をかけてみたのです
がこうした事例は見つかりませんでした。一般論でも良いですからなんらかの情報を
もらえないでしょうか。

 ちなみにどうしても駄目ならForm上にタイマーでも貼り付けてやろうかと考えて
います。タイマーイベントがたまっている受信イベントを押し出してくれれば、
と言う考えです。
# 他のバージョンとの絡みもあるので基本構造は変えたくないのです。

--
成岡@DTI(yn...@jade.dti.ne.jp)

Yuuichi Naruoka

unread,
May 2, 2007, 5:29:45 AM5/2/07
to
 成岡@DTI静岡です。自己フォローです。

 どうも問題はONCOMMではなくmsgboxだったようです。現地から次のトラブル報告が
きたのですが、どうも「msgboxが出ている状態でMSCOMM_ONCOMMが動いている」
としか思えない挙動をしていたのです。それでmsgboxについていろいろと調べた
ところ「“VB4は”winXP上ではmsgboxがそれを呼んだform window の下になることが
ある」と言う情報を見つけました。今回の開発は一応VB5ベースですがこれとて
winXPでの動作が保証されているわけでもなく、どうもこれが原因のようです。

 それでwinXP 上に開発環境を構築していろいろと試してみました。不思議なのは
msgboxのオプションにシステムモーダルを設定しても他のプログラムが動く(エクス
プローラーを普通に使えた)のですが、一方エクスプローラーがアクティブになって
いる時でもmsgboxはエクスプローラーの上に表示されていたので一応ある程度は
効いているようです。ちなみに「アプリケーションモーダル」にしたら、
エクスプローラーをアクティブにしたらmsgboxは下に隠れてしまいました。

--
成岡@DTI(yn...@jade.dti.ne.jp)

0 new messages