[リストへもどる]
一括表示

投稿時間:2004/07/06(Tue) 22:02
投稿者名:ジジ
Eメール:
URL :
タイトル:
実行時エラー91の原因究明方法
こんばんは。
VB6.0でアプリケーションを作成しているのですがexeで実行すると件名のエラーが出ます。
ただし毎回発生するわけではなくてきわめて低い頻度で発生します。
オペレーションはメニューから子画面を呼び出しファンクションキーを押して戻るだけですが
タッチパネルで高速連打をした場合に時々発生します。
ログを出力しているのですがOKの時もNGの時もまったく同じ流れです。
何かイベントやプロセスが残ったままアプリケーションが終了しているのかな?と思いますが
残念ながらそれを調べるすべを知りません。
現在は例外エラーのGo To文をコメントにして代わりにログを吐くようにしています。
まだテストはしていませんが他に気をつけるところはあるでしょうか。
ご存知の方がいればアドバイス願います。

投稿時間:2004/07/07(Wed) 12:36
投稿者名:Say
Eメール:
URL :
タイトル:
Re: 実行時エラー91の原因究明方法
とりあえずOSとVBには最新のspを当てておくとか。

投稿時間:2004/07/07(Wed) 13:05
投稿者名:へむへむ
Eメール:
URL :
タイトル:
Re: 実行時エラー91の原因究明方法
恐らくイベントの発生順に
関係しているのではないでしょうか?

Option Explicit
Private wObject As Object
Private Sub Command1_Click()
  Do while ...
    '* wObject を使用する処理
    ...
    DoEvents
  Loop
End Sub
Private Sub Form_Load()
  set wObject = ...
End Sub
Private Sub Form_Unload(Cancel As Integer)
  Set wObject = Nothing
End Sub

実際はどのような処理を行っているのか分かりませんが、
例えば、上のようなコードがあった場合、
ボタンを押して Loop 処理中に
フォームの×ボタンなどを押すと
Loop 中なのに Unload イベントが割り込んできて
オブジェクトを解放してしまい、
Loop 処理に戻ってきた時に
wObject は解放されてしまっている
というようなエラーが発生するという現象ではないでしょうか?
Loop 処理後ならば、×を押しても正常に終了しますし。

それなので、イベントプロシージャの
開始時と終了時にそれぞれログを出力するようにし、
プロシージャの呼び順を確認すれば分かるかと。

投稿時間:2004/07/07(Wed) 13:39
投稿者名:ジジ
Eメール:
URL :
タイトル:
Re^2: 実行時エラー91の原因究明方法
なるほどありがとうございます。
確かにLoop中のイベント発生は考えられそうです。
さっそくソースを調べてみます。
取り急ぎお礼まで