Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Помогите подключить функцию API? Добавлено: 29.03.07 13:32  

Автор вопроса:  Alex | Web-сайт: no | ICQ: no 
Нужно в программе следить за каталогом, поступили ли в него данные.Пробовал по книге двумя способами, но не получается.
До этого работал только с VBA. У меня VB 2005 Exprese Edition.
Вот такой код - это последний вариант
первый с использованием Imports System.Runtime.InteropServices

Option Explicit On

Public Class Form1

    Public Declare Auto Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" ( _
            ByVal lpPathName As String, _
            ByVal bWatchSubtree As Boolean, ByVal dwNotifyFilter As Long) _
            As Long
    Public Declare Auto Function FindNextChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
    Public Declare Auto Function FindCloseChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
    Public Declare Auto Function WaitForSingleObject Lib "kernel32" ( _
    ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long '

    Public Const INVALID_HANDLE_VALUE = -1&
    Public Const FILE_NOTIFY_CHANGE_FILE_NAME = &H1
    Public Const WAIT_OBJECT_0 = 0&
    Public Const WAIT_TIMEOUT = &H102& ''

    Public catalog As Long

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim retVal As Long
        Dim lpPathName As String = "d:\COMMON"
        Dim bWatchSubtree As Long = API_TRUE
        Dim dwNotifyFilter As Long = FILE_NOTIFY_CHANGE_FILE_NAME
        Dim dwMilliseconds As Integer = 10000
        'Me.WindowState = FormWindowState.Minimized
        catalog = FindFirstChangeNotification(lpPathName, bWatchSubtree, dwNotifyFilter)
'в это месте выдает такое сообщение.
'попробовал перевести, но не очень понял в чем дело.
'A call to PInvoke function
'"ControlFolder!WindowsApplication1.Module1::FindFirstChangeNotification"
'has unbalanced the stack. This is likely because the 'managed PInvoke signature does not match the unmanaged 'target signature. Check that the calling convention and 'parameters of the PInvoke signature match the target 'unmanaged signature.


        If catalog = INVALID_HANDLE_VALUE Then
            MsgBox("Не могу следить за каталогом")
            Me.Close()
            End
        Else
            While (retVal = WaitForSingleObject(catalog, dwMilliseconds)) <> WAIT_OBJECT_0

            End While
            MsgBox("С каталогом работают")
            FindNextChangeNotification(catalog)

        End If
    End Sub

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 29.03.07 14:42
В .NET есть встроеные средства для мониторинга файловой системы.

System.IO.FileSystemWatcher

    Public Declare Auto Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" ( _
            ByVal lpPathName As String, _
            ByVal bWatchSubtree As Boolean, ByVal dwNotifyFilter As Long) _
            As Long |

Начинаем думать головой - в VB .NET типа 32-х битное целое число - это Integer.

Ответить

Номер ответа: 2
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #2
Добавлено: 29.03.07 15:41
Плюй ты на АПИ-шки... Для этого апишки не нужны.

FileSystemWatcher в помощь.

Ответить

Номер ответа: 3
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #3
Добавлено: 29.03.07 16:01
погоди, погоди...
мабудь в вбнет экспресс нет FSW?

Ответить

Номер ответа: 4
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #4
Добавлено: 29.03.07 16:04
ваабще всем совет-- тем кто юзает справочники ВИНАПИ для ВБ6 под НЕТ читать МСДН-овскую статью Upgrading Code from VB6 to VB.NET
или хотябы знать что

VB6 VB.NET
Short-8bit Short-16bit
Int-16bit Int-32bit
Long-32bit Long-64bit

Ответить

Номер ответа: 5
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #5
Добавлено: 29.03.07 16:04
черт,все пробелы удалились

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 29.03.07 16:58
погоди, погоди...
мабудь в вбнет экспресс нет FSW?

Какую траву ты курил? Еще скажи что в VB .NET Express нет .NET Framework.

ваабще всем совет-- тем кто юзает справочники ВИНАПИ для ВБ6 под НЕТ читать МСДН-овскую статью Upgrading Code from VB6 to VB.NET
или хотябы знать что

VB6 VB.NET
Short-8bit Short-16bit
Int-16bit Int-32bit
Long-32bit Long-64bit

По-моему, тот кто хоть что-то понимал в типах VB6 и VB .NET после твоего объяснения окончательно запутался.

Целочисленные типы:
Тип                      VB6      VB .NET   CLS
8 бит, беззнаковый       Byte     Byte      Byte
16 бит, знаковый         Integer  Short     Int16
32 бит, знаковый         Long     Integer   Int32
64 бит, знаковый           -      Long      Int64

8 бит, знаковый            -      SByte     SByte
16 бит, беззнаковый        -      UShort    UInt16
32 бит, беззнаковый        -      UInteger  UInt32
64 бит, беззнаковый        -      ULong     UInt64

В VB .NET можно использовать как VB .NEt-типы, так и CLS-типы, разницы нет, при компиляции все равно получатся CLS-типы.

Ответить

Номер ответа: 7
Автор ответа:
 Alex



ICQ: no 

Вопросов: 3
Ответов: 13
 Web-сайт: no
 Профиль | | #7
Добавлено: 29.03.07 18:09
Спасибо большое. Дело было действительно в типах.
Все получилось, только подредактировал строку
Public Declare Auto Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA"
сделал
Public Declare Auto Function FindFirstChangeNotification Lib "kernel32".

А System.IO.FileSystem.Watcher - разбираться надо там help на английском, я его плохо знаю, а API у меня есть на русском. Но с использованием System.IO.FileSystem.Watcher я тоже напишу позже, для тренировки.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам