Происходит ошибка: PInvoke item (field,method) must be Static. Код 
такой: 
 
Структуру переделал с вб6, с помощью книги переход на Вб .нет.  
 
  <StructLayout(LayoutKind.Sequential, Pack:=0, CharSet:=CharSet.Auto)> 
Public Structure SHFILEOPSTRUCT 
        Public dwSize As Integer 
        Public hwnd As Integer 
        Public wFunc As Integer 
        <MarshalAs(UnmanagedType.ByValTStr, sizeConst:=256)> Public 
pFrom As String 
        <MarshalAs(UnmanagedType.ByValTStr, sizeConst:=256)> Public pTo 
As String 
        Public fFlags As Short 
        Public fAnyOperationsAborted As Integer 
        Public hNameMappings As Integer 
        <MarshalAs(UnmanagedType.ByValTStr, sizeConst:=256)> Public 
lpszProgressTitle As String '  only used if FOF_SIMPLEPROGRESS 
        Public Sub init() 
            dwSize = Marshal.SizeOf(Me) 
        End Sub 
    End Structure 
 
Const FO_DELETE = &H3 
Const FOF_ALLOWUNDO = &H40 
 
Сама функция. 
 
    <DllImport("shell32")> Public Function SHFileOperation _ 
    (ByVal lpFileOp As SHFILEOPSTRUCT) As Integer 
    End Function 
 
Процедура: 
 
Public Sub ShellDelete(ByVal vntFileName() As String) 
        Dim I As Short 
        Dim sFileNames As String 
        Dim SHFileOp As SHFILEOPSTRUCT 
        For I = LBound(vntFileName) To UBound(vntFileName) 
            sFileNames = sFileNames & vntFileName(I) & vbNullChar 
        Next 
        sFileNames = sFileNames & vbNullChar 
        With SHFileOp 
            .hwnd = Me.Handle.ToInt32 
            .wFunc = FO_DELETE 
            .pFrom = sFileNames 
            .fFlags = FOF_ALLOWUNDO 
        End With 
        SHFileOperation(SHFileOp) 
    End Sub 
 
В массиве имена файлов. 
 
Если знаете, в чем проблема, помогите, пожалуйста, разобраться. Конечно, 
понимаю, что АПИ использовать не рекомендуется, но я не нашел аналога в 
.net. Спасибо. 
 
Ответить
        |