Синтаксис описания

Предупреждение

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

Приведем пример описания функций Win32 API:

Declare Function GetWindowsDirectory Lib "kernel32" Alias _ "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As _ Long) As Long - получает путь к каталогу Windows

Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal IpBuffer As String, ByVal nSize As _ Long) As Long - получает путь к системному каталогу Windows

Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _ (ByVal nBufferLength As Long, ByVal IpBuffer As String) As Long - получает путь к каталогу, выделенному под временные файлы

Declare Function SetCurrentDirectory Lib "kernel32" Alias _ "SetCurrentDirectoryA"(ByVal lpPathName As String) As Long - задает текущий каталог

На первый взгляд приведенные примеры могут показаться очень сложным. Однако усвоив только несколько основных правил, можно безопасно и эффективно использовать Win32 API.

Использование WIN32API.TXT

Microsoft поставляет вместе со многими приложениями, включая Visual Basic, файл WIN32API.TXT, который содержит описание всех функций Win32 API. В данном файле находятся также описание структур данных" констант, используемых подпрограммами API. Длина файла слишком велика, чтобы включать его в каждый проект VBA, поэтому можно скопировать в модуль описание требуемых функций, а также типов данных или констант.

Приведем синтаксис инструкции описания функции Win32 API:

Declare Function | Sub имя Lib "имя библиотеки" [Alias "псевдоним"] (аргументы) [As возвращаемый_тип]

Ниже приводится описание параметров функции.

Функции и процедуры

В Win32 API имеются функции и процедуры. В первом примере показано описание процедуры, а во втором - описание функции:

Declare Sub GetSystemTime Lib "kernel32" Alias "GetSystemTime" _ (lpSystemTime As SYSTEMTIME) - получает текущее системное время

Declare Function VerLanguageName Lib "kerne132" Alias _ "VerLanguageNameA" (ByVal wLang As Long, ByVal szLang As String, _ ByVal nSize As Long) As Long - получает текстовое название языка по идентификатору (&H4E3 - Windows (кириллица)

Обратите внимание на то, что в первом описании используется ключевое слово Sub.

Во втором описании используется ключевое слово Function. Обратите внимание на выражение As Long, которое указывает на тип возвращаемого функцией значения. Покажем фрагмент программы, при выполнении которой возникает ошибка несоответствия типов.

Declare Function SomeFunction Lib "SomeLib" (MyArgument) as Long

Dim MyReturn as String

MyReturn = SomeFunction(My Argument)

Задание имени библиотеки

При описании подпрограммы Win32 API необходимо задать библиотеку динамической компоновки, в которой находится эта подпрограмма.

Имя библиотеки указывается в кавычках после ключевого слова Lib. При этом обычно не требуется задавать расширение или путь к библиотеке.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: