Inetコントロールを標準モジュールへAS Control で引数として渡した場合に、正常に動作させるには?


のれん  2006-07-10 19:17:53  No: 132286

困ったときにいつも拝見させて頂いております。
早速ですが、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コントロールを引数として渡した場合、正常に動作しないのでしょうか?


LESIA  2006-07-11 21:50:04  No: 132287

はずしてるかもしれませんが、InetコントロールをByValで渡してるからでは?


朱弥  2006-07-12 17:41:03  No: 132288

レスありがとうございます。
Byvalを外して確認してみましたが、結果は変わりませんでした。
書き忘れていましたが、プロジェクト上での完全コンパイル後の実行では正常に動作しますが、EXEにすると投稿した内容のように正常に動作しません。

その後いろいろ試してみましたのでまとめます。
VB5ではプロジェクトとEXEで異なる動作をする。
異常な動作をするのは、標準モジュールへ引数としてコントロールを渡している場合のみでInetコントロールを標準モジュール内で直接指定した場合は現象は発生しない。

その場しのぎですが、共通用のフォームを作成し、それと標準モジュール(共通フォーム上のInetコントロールを直接指定)をセットにして使用するようにしました。

ちなみに、VB6環境ではこの現象は発生しませんでしたので、VB5のバグなのかなぁと思っています。

何か情報がありましたら、引き続きよろしくお願いします。


のれん  2006-07-12 17:42:19  No: 132289

名前を間違えて投稿してしまいました。
申し訳ありません。


ガッ  2006-07-12 19:39:31  No: 132290

えーと、これはInetコントロールのバグかもしれません。
状況は違いますが、昔私がInetコントロールを使ったソフトでもアヤシイ動きをしました。
(当方はVB6SP6です)

アヤシイ動き:
・Executeメソッドの後に、DoEventsを含むループでStillExecutingプロパティを監視する。
  →StateChangedイベントが永久に発生しない
・Executeメソッドの後に、VBでイベントループにさせる。
  →正常にStateChangedイベントが発生する
結局、あるイベントプロシージャでExecuteメソッドをした後、
直ぐにそのプロシージャを抜け、StateChangedイベントプロシージャの内部で「連鎖」するように仕組みました。

FTPを使いたいのなら、Inetコントロール以外のたとえばWinInetAPIなどの検討をするのもいいかもしれません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加