Регистрирует функцию во внешней библиотеке совместного использования. Библиотеки представляют собой 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 подобного типа. Например:

  CopyCode imageСкопировать код
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 или функцией библиотеки совместного использования. Вы можете включить с целью напоминания имен и типов параметров, которые должна получать функция.

Expand imageПримечания

Прежде чем вы вызовите функцию библотеки совместного использования из кода 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.

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

  CopyCode imageСкопировать код
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

Expand imageПример

Этот пример для OS Windows возвращает дескриптор окна для Visual FoxPro или нуль, если вы переключились в другое приложение Windows . Во время отображения окна WAIT, у вас есть 5 секунд, для того, чтобы нажав ALT+TAB переключиться в другое приложение Windows, или вы можете остаться в Visual FoxPro, как в активном приложении.

  CopyCode imageСкопировать код
CLEAR
DECLARE INTEGER GetActiveWindow IN win32api
WAIT WINDOW "You can switch to another application now" TIMEOUT 5
? GetActiveWindow( )

Expand image Смотри также