投稿日 | : 2005/08/24(Wed) 11:14 |
投稿者 | : ガッ |
Eメール | : |
URL | : |
タイトル | : Re^8: Inetを利用したDIRについて |
私のデバッグ方法…参考になるかな…?
★をつけたところを追加します。
> Private Sub Command1_Click()
> Dim strData As String
>
> With Inet1
> .URL = "ftp://test"
> .AccessType = icFTP
> End With
>
debug.? "A:CD webTEST" '★
> Inet1.Execute , "CD webTEST"
debug.? "B:CD webTEST" '★
> '待機処理
> Do While Inet1.StillExecuting
> DoEvents
> Loop
debug.? "A:PUT C:\TEST\test.tif test.tif" '★
> Inet1.Execute , "PUT C:\TEST\test.tif test.tif"
debug.? "B:PUT C:\TEST\test.tif test.tif" '★
> Do While Inet1.StillExecuting
> DoEvents
> Loop
debug.? "done" '★
> Inet1.Execute , " CLOSE"
> Inet1.Execute , " QUIT"
>
> With Inet1
> .URL = "ftp://test"
> .AccessType = icFTP
> End With
>
> 'とりあえず両方はあきらめて、サイズだけでも取得しようとしています。
> Inet1.Execute , " SIZE test.tif"
> Do While Inet1.StillExecuting = True
> DoEvents
> Loop
>
> End Sub
>
> Private Sub Inet1_StateChanged(ByVal State As Integer)
> Dim vtData As Variant ' データを入れる変数。
> Dim strData As String: strData = ""
> Dim bDone As Boolean: bDone = False
>
> Select Case State
> Case icResponseCompleted
> ' 最初のチャンクを取得します。
debug.? "StateChanged:recv start" '★
> vtData = Inet1.GetChunk(1024, icString)
> DoEvents
>
> Do While Not bDone
> DoEvents
> strData = strData & vtData
> DoEvents
> ' 次のチャンクを取得します。
> vtData = Inet1.GetChunk(1024, icString)
> If Len(vtData) = 0 Then
> bDone = True
> End If
> Loop
debug.? "StateChanged:recv comp" '★
> 'ここで値取得してログに出力
>
> Case icError
> 'エラー処理
> End Select
> End Sub
デバッグ出力としては、
A:CD webTEST
B:CD webTEST
StateChanged:recv start
StateChanged:recv comp
A:PUT C:\TEST\test.tif test.tif
B:PUT C:\TEST\test.tif test.tif
StateChanged:recv start
StateChanged:recv comp
done
となっているはずですが、どうなるでしょう?
> つまり実行する事に、取れたり取れなかったりといった具合です。
微妙ですねぇ…
> 最初はアップロードしたファイルだから、認識できないのかと疑いましたが
> 既存のファイルをSIZEで取得した場合も同様の現象が発生することから
> アップロードファイル事態に問題があるわけではなさそうです。
>
> ためしに、ファイルサイズに値が戻ってくるまでループしてみましたが
> 予想通りというかなんというか無限ループに陥りましたorz
ちゃんとStateChangedイベントで受信処理を無限ループになりますか?
…そうなると、やっぱりInetの内部処理がアヤシイですねぇ…
> 引き続き調査を行いますので、
> 何かお気づきの点などございましたら、
> ご助言の程、よろしくお願い致します。
現在私もInetコントロールを使ってHTMLをダウンロードするプログラムを作って使っていますが、
以下の点で困っているのです(ぃぇ、別に解決しようとしているわけではなくて…)
1 ExecuteでGETメソッドを使って非同期にダウンロードを開始する
2 Inetコントロールをおいたウィンドウをリサイズしたり、ダブルクリックしたり、移動したり
出来なくなる(!
→ダウンロードが完了すると元通り。
(もしかしたら、Executeの内部で自力でウィンドウメッセージを処理していて、マウス系のイベントを
阻
害していたりするかも…)
次に作るなら、こんなコントロール使うよりも他のを使おうかな…とかも考えていたり(orz
で、叶さんの問題もイベントに関するものなのでもしかしたら私の問題と根本は同じだったりするかも
し
れません。
→あきらめる、と…(TT
※参考URL
hhttp://homepage1.nifty.com/MADIA/vb/vb_bbs2/200409_04090078.html
※戯言
VB6はシングルスレッド→InetコントロールがVBに所属するとなると、スレッドは増えやせない?→
けど非同期に実行できているので、タイマーとか使っているのかな?→
内部でウィンドウメッセージで処理してる?それともコールバック関数使ってる?→
あやすぃー……
長文しつれいしましたー