Шаг 11 - Инструкция Declare

Применяется на уровне модуля ссылок на внешние процедуры в библиотеке динамической компоновки (DLL).

[Public | Private] Declare Sub имя Lib "имяБиблиотеки" [Alias "псевдоним"] [([списокАргументов])]
[Public | Private] Declare Function имя Lib "имяБиблиотеки" [Alias "псевдоним"] [([списокАргументов])] [As тип]

Параметры
Public
Необязательный. Используется для описания процедур, которые доступны для всех других процедур во всех модулях.
Private
Необязательный. Используется для описания процедур, которые доступны только в модуле, в котором выполняется описание.
Sub
Необязательный (должно быть указано одно из ключевых слов Sub или Function). Указывает, что процедура не возвращает значение.
Function
Необязательный (должно быть указано одно из ключевых слов Sub или Function). Указывает, что процедура возвращает значение, которое может быть использовано в выражении.
имя
Обязательный. Любое допустимое имя процедуры. Следует помнить, что вход в библиотеки динамической компоновки осуществляется с учетом регистра.
Lib
Обязательный. Указывает, что описываемая процедура содержится в библиотеке динамической компоновки или в программном ресурсе. Предложение Lib обязательно для каждого описания.
имяБиблиотеки
Обязательный. Имя библиотеки динамической компоновки или программного ресурса, которые содержат описываемую процедуру.
Alias
Необязательный. Указывает, что вызываемая процедура имеет другое имя в библиотеке динамической компоновки. Это полезно, когда имя внешней процедуры совпадает с ключевым словом. Имеет смысл использовать Alias и в том случае, когда имя процедуры библиотеки динамической компоновки совпадает с именем общей переменной, константы или любой другой процедуры в той же области определения. Alias полезен также, если некоторые символы в имени процедуры библиотеки динамической компоновки не соответствуют правилам именования для библиотек динамической компоновки.
псевдоним
Необязательный. Имя процедуры в библиотеке динамической компоновки или в программном ресурсе. Если первым символом не является символ (#), псевдоним является именем точки входа процедуры в библиотеке динамической компоновки. Если символ (#) является первым символом, все последующие символы должны указывать порядковый номер точки входа в процедуру.
списокАргументов
Необязательный. Список переменных, представляющий аргументы, которые передаются в процедуру при ее вызове. Аргумент списокАргументов имеет следующий синтаксис и элементы:

тип
Необязательный. Тип данных значения, возвращаемого процедурой Function; допускаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Variant, определяемый пользователем тип или объектный тип.

Замечания
Для процедур Function тип данных процедуры определяет тип возвращаемых данных. Воспользуйтесь предложением As после элемента списокАргументов, чтобы определить тип данных, возвращаемых функцией. Внутри элемента списокАргументов можно использовать предложение As для задания типа данных любого из аргументов, передаваемых в процедуру. В дополнение к указанию любого стандартного типа данных, предложение As Any в аргументе списокАргументов позволяет приостановить проверку типа данных и разрешить передачу в процедуру любого типа данных.
Пустые скобки указывают, что процедура Sub или Function не имеет аргументов, и что в конструкции Visual Basic следует обеспечить отсутствие передачи аргументов. В следующем примере, процедура First не имеет аргументов. Если при вызове процедуры First будут заданы аргументы, возникнет ошибка:

Declare Sub First Lib "MyLib" ()

Если список аргументов включен в описание, то число и тип аргументов проверяются при каждом вызове процедуры. В следующем примере процедура First имеет один аргумент типа Long:

Declare Sub First Lib "MyLib" (X As Long)

Невозможно использование строк фиксированной длины в списке аргументов инструкции Declare, в процедурах допускается передача только строк переменной длины. Строки фиксированной длины могут быть аргументами процедуры, но они преобразуются перед их передачей в строки переменной длины.
В языке Visual Basic имеется константа vbNullString для использования при вызове внешних процедур, когда внешней процедуре требуется строка без значения. Это не то же самое, что пустая строка ("").

Пример
В данном примере показано, как использовать инструкцию Declare на уровне модуля в стандартном модуле для описания ссылки на внешнюю процедуру из библиотеки динамической компоновки (DLL) или на программный ресурс Macintosh. Инструкции Declare могут быть помещены в модули класса, если они являются личными (Private).

' В Microsoft Windows (16-разрядной):
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
' Пусть SomeBeep является псевдонимом для имени процедуры.
Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer)
' Для вызова GetWinFlags в предложении Alias
' используется порядковый номер.
Declare Function GetWinFlags Lib "Kernel" Alias "#132"() As Long

' В 32-разрядной Microsoft Windows используется библиотека USER32.DLL,
' а не USER.DLL. Для написания программы, способной работать в 32- или
' 16- разрядной Microsoft Windows, используется условная компиляция.
#If Win32 Then
	Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
#Else
	Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
#End If

' На Macintosh:
Declare Sub MessageAlert Lib "MyHd:MyAlert" Alias "MyAlert" (ByVal N _
As Integer)
' В предложении Alias используется ресурс программы.
Declare Sub MessageAlert Lib "MyHd:MyAlert" Alias "XTST$MyAlert" _
(ByVal N As Integer)

' Если указатель типа ресурса программы содержит только три символа,
' пробел на месте четвертого символа является обязательным.
Declare Sub MessageAlert Lib "MyHd:AnAlert" Alias "COD $AnAlert" _
(ByVal N As Integer)

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.