HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0106
らきdelcom失敗? onerror命令での強制復帰4解決


らき

リンク

2012/1/6(Fri) 21:32:47|NO.44133

comコンポーネントでブラウザを作成しております。

wait命令の行でエラー1が起こってしまい、困っております。
おそらくdelcomの失敗だと思いますが…

具体的にはこのようなプログラムを作成しております。
再現するにはプログラムを実行後表示されたブラウザ上で
TABキーを押し続けてステータスを変化させ続けると
あるところで(私の環境では2分ぐらい)

wait命令の場所(33行目)でエラー1が出てしまいます。
これは、delcom命令の失敗でしょうか。

解決策かわかりませんが、さっぱりでしたのでonerrorで復帰しています。
しかしonerrorで復帰させる命令でないと書いてありましたので不安です。
このエラーを放置し続けるとどうなりますかね;
詳しい方、どうかご教授お願いします。

環境によっては39行目でパラメータが多すぎますと出るかもしれません。
使用HSPのバージョンは3.3です。



#define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020AFC7AC4D}"
#define DISPID_STATUSTEXTCHANGE 102
onerror gosub *er
onerror 0

//----------------------略

target="http://google.co.jp/"
newcom ie, "InternetExplorer.Application"
ie("Visible")=1
ie->"Navigate" target

repeat

gosub *ev
//略

wait 10
loop


*ev
comevent ie_event, ie, DIID_DWebBrowserEvents2,*event

pos 0,0
wait 100
color 255,255,255:boxf
color:mes status

//中略
// onerror 1
delcom ie_event //イベント破棄?
wait 10 //何度かまわしているとなぜかここでエラーが起きることがある。
// onerror 0

return

*event
dispid = comevdisp(ie_event)
if (dispid = DISPID_STATUSTEXTCHANGE){comevarg status,ie_event,0}
wait 1
return
*er
delcom ie_event
return



この記事に返信する


らき

リンク

2012/1/6(Fri) 22:04:01|NO.44139

リファレンスには
comevent p1,p2,p3,*label
p1で指定された変数をイベント処理を行なうためのCOMオブジェクト型として初期化します。
イベントの取得は、delcom命令によりCOMオブジェクトが破棄されるまで継続されます。
と記載されております。

delcom側にも
delcom p1
p1で指定したCOMオブジェクト型の変数のインスタンスを削除します。
と記載されております。

delcomで止めるのだと思っていましたが
使用できないとなるとこの場合はどのようにしたらよろしいでしょうか

comevent ie_event, ie, DIID_DWebBrowserEvents2,*event2
//略
*event2
return
と、新しく割り込みを初期化するとバグはなくなりますが、
メイン文の別処理中にも割り込みが発生し、
こんどはそちらで不具合が起きてしまいます。(waitの時に割り込みをされ、待ちが短くなってしまう)

delcomの行で割り込みを停止させたいです。。
すみませんがご教授お願いしたいです;;



らき

リンク

2012/1/13(Fri) 16:44:40|NO.44259

いろいろと試して見た結果、
delcom ie_event
で起こっているエラーではなさそうです。。
ie_event=0
で無理やり初期化させて割り込みを停止させることができました。
が、wait命令のところでエラーが起こります。
このwait命令をはずしても次のwait命令の行でエラーが起こります(エラー1)

原因がさっぱりわかりません。このエラーの回避方法はありますでしょうか?
onerrorでも回避不可能でした。



XBG|YAMANOTE231103(PC)

リンク

2012/1/13(Fri) 17:50:45|NO.44260

長いこと書いていませんが、エラー以前にかなり危ない使い方されてませんか?

イベントが起こるたびにcomeventから*eventにジャンプするため、
*eventの途中にイベントが起こるとタイミングによって処理が中断され、
ここで恐らく各変数値が異常になってしまうのでしょう。

イベント毎ではなく、時間を指定して定期的に目的の値を取得するほうがいいかも

onerror gosub *er onerror 0 //----------------------略 target="http://google.co.jp/" newcom ie, "InternetExplorer.Application" ie("Visible")=1 ie->"Navigate" target repeat gosub *ev //略 wait 10 loop *ev onerror 1 pos 0,0 color 255,255,255:boxf color:mes ie("StatusText") onerror 0 return *er dialog err end
2分間は試していないのでごめんなさい



らき

リンク

2012/1/15(Sun) 02:46:54|NO.44284

ありがとうございます。目的の動作はできました。
イベントの割り込み中もイベント割り込みが発生するのですね、、
割り込みが連続で起こるとどんな動作になるのか気になります。



ONION software Copyright 1997-2023(c) All rights reserved.