掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
FtpPutFileの戻り値 (ID:86007)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
FtpPutFileのバグなのか私の認識違いなのか 同じようなトラブルを経験した人はいますか? Public Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" _ (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _ ByVal lpszRemoteFile As String, _ ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean Dim R As Boolean と宣言しておいて、各パラメーターをセットして R = FtpPutFile(hConnection, lpszLocalFile, lpszNewRemoteFile, dwFlags, dwContext) If R = True Then Debug.Print "True" Else Debug.Print "False" End If を実行する、 2行目でブレークをかけて、Rにフォーカスを当てると、バルーンが出て「R = True」と出る。 ところが、プログラムは Debug.Printに "False" を書き出す。 ちなみに、Debug.Print R を実行すると 「True」を書き出す。 そこで次のコードを追加すると If R <> False Then Debug.Print "Not False" Else Debug.Print "False" End If 今度は、Debug.Printに "Not False"を書き出す。 つまりBooleanで有りながら、「R = True」でなく「R <> False」の物が存在してしまう。 このコードの実行結果は指定したファイルはFTPサーバーに正常にコピーされ、戻り値の判断が 出来ないだけである。 更に厄介なことに Private Function FtpPutFileSub(hConnection, lpszLocalFile, lpszNewRemoteFile, dwFlags, dwContext) Dim R As Boolean R = FtpPutFile(hConnection, lpszLocalFile, lpszNewRemoteFile, dwFlags, dwContext) FtpPutFileSub = R End Function とファンクション化して R = FtpPutFileSub(hConnection, lpszLocalFile, lpszNewRemoteFile, dwFlags, dwContext) If R = True Then Debug.Print "True" Else Debug.Print "False" End If とすると開発環境及び、P-Codeコンパイルでは「R = True」となって正常に動作するけれど、 ネイティブコンパイラーでは「R = True」と判断されず誤動作するのである。 とりあえず If R = True Then を If R <> False Then と書き直すと正常に動作はするけれど APIの関数がBooleanを返すとき If R = True Thenは怖くて使用できなくなった。 開発環境はWin2k VB6&SP6 です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.