困ったときにいつも拝見させて頂いております。
早速ですが、Inetコントロールを標準モジュールへ引数として渡した場合に、正常に動作しなくて困っています。
環境はVB5のSP3です。
Public Function gfboFTPコマンド実行(ByVal vInetCrt As Control, ByVal vsCommand As String, ByRef vlErrNo As Long) As Boolean
With vInetCrt
On Error GoTo Err
' コマンドの実行
.Execute , vsCommand
'処理が終わるまで待機
Do While vInetCrt.StillExecuting <> False
DoEvents
Loop
If glSete = icResponseCompleted Then
gfboFTPコマンド実行 = True
Else
gfboFTPコマンド実行 = False
End If
On Error GoTo 0
End With
Exit Function
Err:
gfboFTPコマンド実行 = False
vlErrNo = Err.Number
End Function
PUTでローカルからURL上へアップする際に、ローカルファイルがない場合にエラーを表示したいのですが、元のファイルがないのにInet1_StateChangedの引数(関数内でglSeteに格納)がicResponseCompletedになってしまいます。
これを、コマンドボタン内で直接コントロールを指定して実行した場合はglSeteがicErrorになります。
標準モジュールへInetコントロールを引数として渡した場合、正常に動作しないのでしょうか?
はずしてるかもしれませんが、InetコントロールをByValで渡してるからでは?
レスありがとうございます。
Byvalを外して確認してみましたが、結果は変わりませんでした。
書き忘れていましたが、プロジェクト上での完全コンパイル後の実行では正常に動作しますが、EXEにすると投稿した内容のように正常に動作しません。
その後いろいろ試してみましたのでまとめます。
VB5ではプロジェクトとEXEで異なる動作をする。
異常な動作をするのは、標準モジュールへ引数としてコントロールを渡している場合のみでInetコントロールを標準モジュール内で直接指定した場合は現象は発生しない。
その場しのぎですが、共通用のフォームを作成し、それと標準モジュール(共通フォーム上のInetコントロールを直接指定)をセットにして使用するようにしました。
ちなみに、VB6環境ではこの現象は発生しませんでしたので、VB5のバグなのかなぁと思っています。
何か情報がありましたら、引き続きよろしくお願いします。
名前を間違えて投稿してしまいました。
申し訳ありません。
えーと、これはInetコントロールのバグかもしれません。
状況は違いますが、昔私がInetコントロールを使ったソフトでもアヤシイ動きをしました。
(当方はVB6SP6です)
アヤシイ動き:
・Executeメソッドの後に、DoEventsを含むループでStillExecutingプロパティを監視する。
→StateChangedイベントが永久に発生しない
・Executeメソッドの後に、VBでイベントループにさせる。
→正常にStateChangedイベントが発生する
結局、あるイベントプロシージャでExecuteメソッドをした後、
直ぐにそのプロシージャを抜け、StateChangedイベントプロシージャの内部で「連鎖」するように仕組みました。
FTPを使いたいのなら、Inetコントロール以外のたとえばWinInetAPIなどの検討をするのもいいかもしれません。
ツイート | ![]() |