Команда DECLARE - DLL

Регистрирует функцию во внешней 32-разрядной библиотеке динамических связей Windows (.DLL).

Синтаксис:

DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]
	[cParamType1 [@] ParamName1,
	cParamType2 [@] ParamName2, ...]

Параметры:
cFunctionType
Указывает, имеет ли 32-разрядная .DLL - функция системы Windows возвращаемое значение. Аргумент cFunctionType включается, если функция имеет возвращаемое значение; в противном случае cFunctionType опускается.
cFunctionType может принимать следующие значения:

cFunctionType	Описание
SHORT		16-разрядное целое число
INTEGER		32-разрядное целое число
SINGLE		32-разрядное число с плавающей запятой
DOUBLE		64-разрядное число с плавающей запятой
STRING		Символьная строка

FunctionName
Задает имя 32-разрядной .DLL -функции Windows для регистрации в Visual FoxPro. Обратите внимание: в имени FunctionName важен регистр символов.
Имя 32-разрядной .DLL-функции Windows может отличаться от описания в документе Win32 API. Например, функцию MessageBox следует назвать MessageBoxA (для однобайтных символов) или MessageBoxW (для UNICODE). Если Visual FoxPro не может найти 32-разрядную .DLL-функцию Windows, заданную аргументом FunctionName, к концу имени функции присоединяется буква A, и Visual FoxPro повторяет поиск, используя новое имя.
Если имя заданной 32-разрядной .DLL -функции Windows совпадает с именем функции Visual FoxPro или является недопустимым именем Visual FoxPro, включите имя 32-разрядной .DLL-функции Windows в качестве FunctionName и присвойте этой функции допустимое имя Visual FoxPro с помощью предложения AS, описанного ниже.
IN LibraryName
Задает имя внешней библиотеки .DLL в Windows, которая содержит 32-разрядную .DLL -функцию Windows FunctionName. Если задать WIN32API в качестве LibraryName, Visual FoxPro ищет 32-разрядную .DLL-функцию Windows в библиотеках KERNEL32.DLL, GDI32.DLL, USER32.DLL, MPR.DLL и ADVAPI32.DLL.
AS AliasName
Задает псевдоним для имени 32-разрядной .DLL-функции Windows, которое совпадает с именем некоторой функции Visual FoxPro или является недопустимым именем Visual FoxPro. В качестве AliasName нельзя использовать зарезервированное слово Visual FoxPro или имя 32-разрядной .DLL -функции Windows, уже зарегистрированное в Visual FoxPro.
Пользуйтесь псевдонимом AliasName для вызова 32-разрядной .DLL-функции Windows. В AliasName несущественен регистр символов.
cParameterType1 [@] ParamName1, cParameterType2 [@] ParamName2, ...
Задает типы параметров, передаваемых в 32-разрядную .DLL-функцию Windows.
Аргумент cParameterType является обязательным; он задает тип параметра, ожидаемый 32-разрядной .DLL-функцией Windows. cParameterType может принимать одно из следующих значений:

cParameterType	Описание
INTEGER		32-разрядное целое число
SINGLE		32-разрядное число с плавающей запятой
DOUBLE		64-разрядное число с плавающей запятой
STRING		Символьная строка

Если параметры не принадлежат типу, ожидаемому 32-разрядной .DLL-функцией Windows, Visual FoxPro генерирует ошибку. Неопределенное значение может быть передано как символьная строка.
Чтобы при вызове функции передать параметр по ссылке, в данной команде после параметра cParameterType и в вызывающей функции перед соответствующей переменной нужно поставить символ @. Если не поставить @ в команде DECLARE и/или в вызывающей функции, параметр будет передан по значению. О .DLL-функциях, требующих включения @ для передачи параметров по ссылке, см. документ Microsoft Win32 Programmer's Guide.
Замечание. Имена параметров ParamName1, ParamName2 и т.д. не являются обязательными и не используются в Visual FoxPro или в 32-разрядной .DLL-функции Windows. Их можно задать для напоминания о том, какие имена и типы параметров получает функция.

Комментарии:
Перед тем, как вызывать 32-разрядную .DLL-функцию Windows из Visual FoxPro, необходимо выдать команду DECLARE с именем этой функции, именем содержащей ее библиотеки .DLL и типами параметров, которые функция ожидает получить.
Для совместимости сверху вниз в Visual FoxPro 3.0 по-прежнему поддерживается библиотека FOXTOOLS.FLL (включенная в предыдущие версии FoxPro) библиотека API-интерфейса Visual FoxPro, позволяющая вызывать 16-разрядные .DLL-функции. Однако в Visual FoxPro для вызова таких функций лучше пользоваться командой DECLARE.
Подробнее о 32-разрядных .DLL-функциях Windows см. документацию Microsoft Win32 Programmer's Guide.
Чтобы отобразить имена зарегистрированных функций, выдайте команду DISPLAY STATUS или LIST STATUS. Чтобы удалить зарегистрированные функции из памяти, выдайте команду CLEAR ALL или CLEAR DLLS.

Пример:

* Данный пример отображает дескриптор окна для активного в данный
* момент приложения 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( )

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