Регистрирует функцию во внешней библиотеке совместного использования. Библиотеки представляют собой 32-битные файлы библиотек (.DLL).
DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName] [cParamType1 [@] ParamName1, cParamType2 [@] ParamName2, ...] |
Параметры
- cFunctionType
-
Указывает тип данных возвращемого из библитеки значения, если возможны варианты. Если функция не возвращает значение, опустите cFunctionType в предложении декларации.
cFunctionType может принимает перечисленные ниже значения:
cFunctionType Описание SHORT
16-битное целое число
INTEGER
32-битнон целое число
SINGLE
32-битное число с плавающей запятой
DOUBLE
64-битное число с плавающей запятой
LONG
32-битное длинное целое число
STRING
Символьная строка
OBJECT
Объект типа IDispatch
- FunctionName
-
Указывает имя функции библиотеки совместного использования, регистрируемой в Visual FoxPro. Имена функций, посылаемые в этот параметр являются регистро-чувствительными (case-sensitive).
Замечание
Имя функции DLL может отличаться от имени, указанного в руководстве по Win32 API. Например, функция MessageBox должна быть названа MessageBoxA (для однобайтных символов) или MessageBoxW ( для UNICODE). Если Visual FoxPro не может найти функцию DLL, указанную вами в FunctionName, то в конец имени функции добавляет буква A и Visual FoxPro производит повторный поиск функции с новым именем.
Если указанная вами функция библиотеки совместного использования имеет тоже имя, что и родная функция Visual FoxPro или имя функции не является действительным именем для Visual FoxPro, используйте опцию AS для присвоения функции псевдоимени когда вы ее регистрируете так, как указано ниже в этом описании.
Вы можете, кроме того, использовать OBJECT в качестве возвращаемого значения, например, "DECLARE OBJECT myfunc IN some DLL ..." хотя COM условно не имеет никаких APIs подобного типа. Например:
Скопировать код
DECLARE INTEGER AccessibleObjectFromWindow IN oleacc.dll ; integer, integer, string , object @
- IN LibraryName
-
указывает имя внешней библиотеки совместного использования, содержащей функцию, указанную в FunctionName.
Если вы указали WIN32API для LibraryName, Visual FoxPro ищет 32-битные Windows .dll функцию в Kernel32.dll, Gdi32.dll, User32.dll, Mpr.dll и Advapi32.dll.
- AS AliasName
-
указывает псевдоимя для имени функции библиотеки совместного использования, в случае совпадения имени с именем родной функции Visual FoxPro или если имя функции не является действительным для Visual FoxPro. AliasName не должен быть зарезервированным словом Visual FoxPro или именем функции библиотеки совместного использования, уже зарегистрированной Visual FoxPro.
Если вы присваиваете псевдоимя функции, то и используйте его при вызове функции. AliasName не является регистро-чувствительным.
- cParameterType1[@] ParamName1, cParameterType2[@] ParamName2, ...
-
Указывает тип параметра, посланного функции библиотеки совместного использования.
cParameterType требуется и определяет тип данных любого параметра, который функция библиотеки совместного использования предполагает получить. cParameterType может быть одним из приведенных ниже:
cParameterType Описание INTEGER
32-битное целое число
SINGLE
32-битное число с плавающей запятой
DOUBLE
64-битное число с плавающей запятой
LONG
32-битное длинное целое число
STRING
Символьная строка
Visual FoxPro генерирует ошибку в случае, если тип параметр не соответствует ожидаемому функцией библиотеки совместного использования. Null-значения могут быть посланы как пустые символьные строки.
Для посылки параметра по ссылке при вызове функции, вы должны включить знак (@) после параметра cParameterType при использовании этой команды, то есть при регистрации функции, и перед соответствующей переменно в вызове функции. Если вы не включите @ в DECLARE, в вызове функции, или в обоих случаях, параметр посылается по значению. Для получения более подробной информации о функциях библиотек совместного использования, которые требуют @ для посылки параметра по ссылке, смотрите руководство программиста для вашей операционной системы или окружения (например, посмотрите Microsoft Win32 Programmer's Guide для поиска информации о посылке параметров в Windows DLLs).
Замечание
Имена параметров ParamName1, ParamName2, и т.д. не являются обязательными и не используются Visual FoxPro или функцией библиотеки совместного использования. Вы можете включить с целью напоминания имен и типов параметров, которые должна получать функция.
Примечания
Прежде чем вы вызовите функцию библотеки совместного использования из кода Visual FoxPro, вы должны выдать команду DECLARE с именем функции, именем библиотеки, содержащей функцию и типами параметров, которые функция ожидает получить.
Для обеспечения совместимости с более ранними версиями, Visual FoxPro позволяет вызывать внешние API библиотеки используя команду SET LIBRARY. (Использовав SET LIBRARY, вы можете обращаться к функциям в Foxtools.fll.) Однако, использование команды DECLARE является предпочитаемым методом регистрации функций библиотек совместного использования.
Хотя Visual FoxPro добавил в эту команду опцию OBJECT cFunctionType, в первую очередь для поддержки некоторых процедур ActiveX Accessibility API, вы можете использовать ее в общем виде и с другими процедурами Windows API.
Для получения более подробной информации о вызове функций библиотек совместного использования смотрите руководство программиста для вашей операционной системы или окружения (например, посмотрите Microsoft Win32 Programmer's Guide для поиска информации о вызове функций Windows DLLs).
Для отображения имен зарегистрированных функций используйте команды DISPLAY STATUS или LIST STATUS. Для удаления зарегистрированных функций из памяти используйте команды CLEAR ALL или CLEAR DLLS.
Примечание переводчика. Повторная регистрации функции с помощью разбираемой команды не оказывает влияние на работу приложения, например:
![]() | |
---|---|
CLEAR DECLARE Integer InternetGetLastResponseInfo IN WinInet ; Integer @nError, String @lpcBuffer, Integer @nMax_Path DECLARE Integer InternetGetLastResponseInfo IN WinInet ; Integer @nError, String @lpcBuffer, Integer @nMax_Path DISPLY STATUS |
Пример
Этот пример для OS Windows возвращает дескриптор окна для Visual FoxPro или нуль, если вы переключились в другое приложение Windows . Во время отображения окна WAIT, у вас есть 5 секунд, для того, чтобы нажав ALT+TAB
переключиться в другое приложение Windows, или вы можете остаться в Visual FoxPro, как в активном приложении.
![]() | |
---|---|
CLEAR DECLARE INTEGER GetActiveWindow IN win32api WAIT WINDOW "You can switch to another application now" TIMEOUT 5 ? GetActiveWindow( ) |