- ベストアンサー
VB.NETでのネットワーク参照
VB.NETを使用してファイルのコピーをしようと思っています。 そのソースはVB6で使用したソースをバージョンアップして使う予定です。 ファイルコピーをする際にSHFileOperationというAPIを使用していました。 .NETへ移行すると、実行時にエラーが帰ってきてしまいます。 VB6と.NETではAPIの宣言の仕方も異なるのでしょうか? バージョンアップ後に追加されたメッセージで、'UPGRADE_WARNING: 構造体 SHFILEOPSTRUCT に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。 詳細については、'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1050"' をクリックしてください。 Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer このように書き換わっていました。リンク先を見ても解決の糸口が見えません。 どなたかご指導お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
以前試しに使ったコードです。参考にどうぞ。 Public Structure SHFILEOPSTRUCT Dim hWnd As IntPtr 'Handle Dim wfunc As Integer '&H2 Dim pform As IntPtr 'Marshal.StringToCoTaskMemAnsi(フォルダパス & "*.*") Dim pto As IntPtr 'Marshal.StringToCoTaskMemAnsi(フォルダパス) Dim fFlags As Integer <MarshalAs(UnmanagedType.Bool)> Dim fAnyOperationAborted As Boolean Dim hNamemappings As IntPtr Dim lpszProgressTitle As IntPtr End Structure
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
SHFILEOPSTRUCT構造体の定義はどう書いてます? この構造体は、普通のWin32APIの構造体とは異なりパッキングが1バイトです。
補足
返答ありがとうございます。 Private Structure SHFILEOPSTRUCT Dim hWnd As Integer Dim wFunc As Integer Dim pFrom As String Dim pTo As String Dim fFlags As Short Dim fAnyOperationsAborted As Integer Dim hNameMappings As Integer Dim lpszProgressTitle As String End Structure VB6から何も変えていないので上記のようになっています。 このAPIの構造が違っているのがコピー出来ない原因なのでしょうか?
お礼
ありがとうございました! 無事にコンパイルも通り、ファイルコピーも出来るようになりました。 早い返答本当に助かりました。