• Стабильность и высокая надежность работы функций, связанная с высокой степенью
отладки ОС.
• Отсутствие потребности в дополнительных модулях. Альтернативой использования
Windows API является приобретение дополнительных компонентов, обеспечивающих
расширенную функциональность, что повышает затраты на разработку пользовательского
приложения и создает дополнительные сложности при его распространении.
В то же время мы рекомендуем использовать Windows API только в крайнем случае и при
необходимости повышения скорости работы программы, так как здесь программисту приходится
сталкиваться с более сложными программными конструкциями. Это, естественно, требует
времени на освоение, так как те сложные задачи, которые были скрыты от программиста при
использовании любимого языка программирования высокого уровня с приставкой Visual, теперь
придется решать самому. При этом учтите, что Microsoft до сих не выпустила хорошего
руководства или четко структурированного файла контекстной помощи по Windows API и вам
придется долго блуждать среди многих сотен функций с мудреными названиями. С
профессиональными версиями Visual FoxPro (только на CD-ROM) и Visual Basic поставляется файл
со справочными сведениями по Windows API, но он содержит синтаксис для программирования на
языке Си.
Если вы все же не раздумали использовать функции Windows API, в своей программе вам
придется позаботиться о двух необходимых составляющих. Во-первых, вы должны определить
путь для передачи параметров в вызываемую функцию. Во-вторых - определить механизм для
получения значения, возвращаемого функцией. Эти задачи выполняет команда DECLARE.
В Visual Basic она имеет следующий синтаксис:
[Public | Private] Declare Function FunctionName Lib "LibraryName" [Alias " AliasName" ]
[([ParamList])][As ParamType]
В Visual FoxPro при том же составе параметров синтаксис команды выглядит чуть иначе:
DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName] [cParamType1 [@]
ParamName1,cParamType2 [@] ParamName2, ...]
С помощью этой команды можно зарегистрировать функцию, расположенную в динамической
библиотеке и затем использовать ее как стандартную. В команде выделим четыре основных
компонента:
• Сведения о функции определяются ее именем FunctionName, заданном в библиотеке DLL.
Имя функции следует указывать с соблюдением регистра! Если функция возвращает
какое-либо значение, перед ее именем следует указать тип возвращаемого значения
cFunctionType. Вероятно, здесь уместно напомнить, что в Visual Basic объявление Public
используется для обеспечения доступа к функции из всех процедур, раположенных во
всех модулях. Объявление Private обеспечивает доступ к функции только внутри данного
модуля.
• Имя библиотеки DLL Windows LibraryName, содержащей требуемую функцию. Если вы
хотите использовать функцию, входящую в API Windows, то здесь достаточно написать
WIN32API, что автоматически обеспечит поиск функции в одном из следующих файлов:
KERNEL32.DLL, GDI32.DLL, USER32.DLL, MPR.DLL или ADVAPI32. DLL.
• Псевдоним имени функции для использования в Visual FoxPro или в Visual Basic. Его
удобно использовать для сокращения слишком длинного названия функции или при
угрозе совпадения имени функции с зарезервированным словом.
• Список передаваемых параметров включает обозначение типа и имени параметров,
передаваемых из приложения в функцию DLL Windows. Знак @ после типа параметра
показывает, что он будет передаваться по ссылке, а не по значению. Имя параметра
никак не используется ни приложением, ни функцией DLL и может применяться в команде
только в информационных целях. Если функция DLL требует в качестве аргумента
передачи нулевого указателя (null pointer), то его следует передавать как целое число по
значению.
Для передачи параметров в Visual Basic следует использовать следующий синтаксис:
[Optional][ByVal | ByRef][ParamArray] varname[( )][As ParamType]
converted to PDF by HupBaH9I