こんにちは。
タイトルの通り、APIのファイルフォルダコピー関数に関する質問です。現在VisualBasicでの操作なので、こちらへ掲載させていただきました。
まず環境ですが、
PC:VAIOノート2001年製
OS:Windows2000Pro
外付けフロッピー(A:)ドライブ:Logitec製USBバスパワードライブ
以上の条件で、下記のロジック
Function FileCopy(frm_ctrl As Form, source As String, destination As String) As Variant
Dim lpFileOp As SHFILEOPSTRUCT
Dim lngRetValue As Long
With lpFileOp
.hWnd = frm_ctrl.hWnd
.wFunc = FO_COPY
.pFrom = source
.pTo = destination
.fFlags = FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR Or FOF_MULTIDESTFILES Or _
FOF_SIMPLEPROGRESS
.fAnyOperationsAborted = True
.hNameMappings = 0&
.lpszProgressTitle = "コピー"
End With
lngRetValue = SHFileOperation(lpFileOp)
If lngRetValue <> 0 Then
MsgBox "ファイルコピーに失敗しました。"
End If
AplFileCopy = lngRetValue
End Function
を実行した場合、デザイン環境または実行したexeが強制終了させられ、エラーメッセージが表示されます。
ステップインで追跡した結果、"SHFileOperation(lpFileOp)"の箇所で発生していたのですが、原因が分かりません・・・ちなみにWindowsXPで実行した場合、デザイン環境時のみエラーが発生し、実行環境では正常にファイルコピーが完了しました。
以上から、SHFileOperation()がエラーを発生させる原因または、これを回避・解消する方法をご存知の方、おられましたら、教えてください。
よろしくお願いします。
以下、定義したい構造体です。
Type SHFILEOPSTRUCT
hWnd As Long 'ウインドウのハンドル
wFunc As Long '操作方法
pFrom As String '操作元のファイル名・ディレクトリ名
pTo As String '操作先のファイル名・ディレクトリ名
fFlags As Integer '操作フラッグ(FOF_xxx)
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String
End Type
ちなみに、4つ目の操作フラグの"FOF_SIMPLEPROGRESS"を削除してみたら不具合が起きませんでした。
お礼
takat_tetsuさん、ご回答ありがとうございます。 原因を理解できました。結果としてはVB6でのプログレスバー付き(及びタイトル付き)の使用を避けようと思います。今後もAPI使用時は引数の4バイトは意識しておいた方が良さそうですね。プログレスバーはまた別オブジェクトでも作成してみます。 お忙しいところ、ありがとうございました。感謝します。