Поделиться через


Практическое руководство. Вызов функции Windows, которая принимает неподписанные типы (Visual Basic)

Если вы используете класс, модуль или структуру с элементами без знака целочисленных типов, вы можете получить доступ к этим членам с помощью Visual Basic.

Вызов функции Windows, которая принимает неподписанный тип

  1. Используйте инструкцию Declare, чтобы сообщить Visual Basic, какая библиотека содержит функцию, ее имя в этой библиотеке, порядок вызова и способ преобразования строк при вызове.

  2. В инструкции Declare используйте UInteger, ULong, UShort или Byte в зависимости от каждого параметра с неподписанным типом.

  3. Ознакомьтесь с документацией по вызываемой функции Windows, чтобы найти имена и значения используемые константы. Многие из них определены в файле WinUser.h.

  4. Объявите необходимые константы в коде. Многие константы Windows — это 32-разрядные значения без знака, и их следует объявить As UInteger.

  5. Вызовите функцию как обычно. В следующем примере вызывается функция MessageBoxWindows, которая принимает несписанный целочисленный аргумент.

    Public Class windowsMessage
        Private Declare Auto Function mb Lib "user32.dll" Alias "MessageBox" (
            ByVal hWnd As Integer,
            ByVal lpText As String,
            ByVal lpCaption As String,
            ByVal uType As UInteger) As Integer
        Private Const MB_OK As UInteger = 0
        Private Const MB_ICONEXCLAMATION As UInteger = &H30
        Private Const IDOK As UInteger = 1
        Private Const IDCLOSE As UInteger = 8
        Private Const c As UInteger = MB_OK Or MB_ICONEXCLAMATION
        Public Function messageThroughWindows() As String
            Dim r As Integer = mb(0, "Click OK if you see this!",
                "Windows API call", c)
            Dim s As String = "Windows API MessageBox returned " &
                 CStr(r)& vbCrLf & "(IDOK = " & CStr(IDOK) &
                 ", IDCLOSE = " & CStr(IDCLOSE) & ")"
            Return s
        End Function
    End Class
    

    Вы можете протестировать функцию messageThroughWindows с помощью следующего кода.

    Public Sub consumeWindowsMessage()
        Dim w As New windowsMessage
        w.messageThroughWindows()
    End Sub
    

    Осторожность

    Типы данных UInteger, ULong, UShort и SByte не являются частью Language Independence and Language-Independent Components (CLS), поэтому код, совместимый с CLS, не может использовать компонент, использующий их.

    Это важно

    Вызов неуправляемого кода, например интерфейса программирования приложений Windows (API), подвергает ваш код потенциальным угрозам безопасности.

    Это важно

    Вызов API Windows требует прав доступа к неуправляемому коду, что может повлиять на его выполнение в условиях частичного доверия. Дополнительные сведения см. в разделе SecurityPermission " Разрешения доступа к коду".

См. также