Практическое руководство. Вызов функции Windows, принимающей значение беззнакового типа
Обновлен: Ноябрь 2007
При использовании класса, модуля или структуры, имеющих члены беззнаковых целых типов, можно получить доступ к этим членам с помощью Visual Basic.
Для вызова функции Windows, которая принимает беззнаковый тип
Используйте Оператор Declare, чтобы сообщить Visual Basic, какая из библиотек содержит функцию с данным именем, какова последовательность вызова, и как преобразовать строки при её вызове.
В инструкции Declare используйте UInteger, ULong, UShort или Byte соответственно для каждого параметра с беззнаковым типом.
Обратитесь к документации вызываемой функции Windows для поиска имен и значений констант, которые она использует. Многие из них определены в файле WinUser.h.
Объявите необходимые константы в коде программы. Многие константы Windows - 32-разрядные беззнаковые значения, их следует объявлять как AsUInteger.
Вызовите функцию обычным образом. В следующем примере вызывается Windows функция MessageBox, которая принимает беззнаковое целое число в качестве аргумента.
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 не являются частью Спецификация CLS (CLS), поэтому CLS-совместимый код не может использовать компонент, который использует их.
Примечание о безопасности. Создание вызова неуправляемого кода, такого как программного интерфейса приложения (API), подвергает ваш код потенциальной опасности.
Примечание о безопасности. Вызов Windows API требует разрешения неуправляемого кода, которое может повлиять на его выполнение в случаях частичного доверия. Дополнительные сведения см. в разделах SecurityPermission и Разрешения для доступа к коду.
См. также
Задачи
Практическое руководство. Оптимизация хранения положительных целых чисел с беззнаковыми типами
Пошаговое руководство. Вызов интерфейсов прикладного программирования (API) Windows
Ссылки
Сводка типов данных (Visual Basic)