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

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

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

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

  2. В инструкции Declare используйте UInteger, ULongUShortили 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
    

    Внимание

    UIntegerULongТипы данных , UShortи SByte типы данных не являются частью компонентов, независимых от языка и языка ( CLS), поэтому код, совместимый с CLS, не может использовать компонент, использующий их.

    Внимание

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

    Внимание

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

См. также