VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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に所属するとなると、スレッドは増えやせない?→
けど非同期に実行できているので、タイマーとか使っているのかな?→
内部でウィンドウメッセージで処理してる?それともコールバック関数使ってる?→
あやすぃー……

長文しつれいしましたー


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -