Windows API (Прикладной интерфейс программирования)

Visual Basic предоставляет языковые средства для декларации и вызова функции из библиотек динамической компоновки (DLL). Данный механизм позволяет расширять приложения, за счёт использования дополнительных библиотек предоставляемых другими разработчиками, в том числе написанные на различных языках программирования. Один из таких наборов библиотек предоставляется операционной системой Microsoft Windows.

Общий синтаксис декларации функции и процедуры выглядит следующим образом:

[Public|Private] Declare Sub <имя_процедуры> lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)]

[Public|Private] Declare Function <имя_функциии> lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)] [As тип_возврата]

Псевдонимы необходимо задавать в ряде случаев: использование в названии функции зарезервированных идентификаторов Visual Basic, название содержат недопустимые символы или не могут быть правильно интерпретированы средой. Вызываемые функции должны поддерживать соглашение о вызове StdCall.

При передаче параметра с типом String в функцию WINAPI, VB осуществляет автоматическую конвертацию кодировки из Unicode в ANSI, после выполнения функции, происходит обратная конвертация из ANSI в Unicode. Чтобы исключить автоматическую конвертацию строк, аргументы функции необходимо задекларировать с типом Long, и передавать указатель на строку, используя функцию StrPtr, таким образом можно оптимизировать производительность приложения выполняющее множественные вызовы функций.

Пример вызова Windows API для получение полного пути к каталогу Windows и вывода сообщения на экран:

Private Declare Function GetWindowsDirectory Lib "kernel32.dll" Alias "GetWindowsDirectoryA" (ByVal buffer As String, ByVal nSize As Long) As Long

Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

Private Const MB_ICONASTERISK As Long = 64

Public Sub Main()

Dim buffer As String 'Переменная в которую будет получен результат функции.

Dim retLen As Long

buffer = String(256, vbNullChar)

lens = GetWindowsDirectory(buffer, Len(buffer)) 'Вызов функции

buffer = Left(buffer, lens)

MessageBox 0&, "ОС установлена в каталог: " & buffer, "Информация", MB_ICONASTERISK 'Вызов функции

End Sub

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

Достоинства и недостатки

Достоинства

• Высокая скорость создания приложений с графическим интерфейсом для Microsoft Windows.

• Простой синтаксис языка обеспечивает низкий порог вхождения.

• Возможность компиляции как в машинный код, так и в P-код (по выбору программиста).

• Безопасность типов обеспечивает защита от ошибок, связанных с применением указателей и доступом к памяти. Этот аспект делает Visual Basic приложения более стабильными, но также является объектом критики.

• Возможность использования большинства WinAPI функции, для расширения функциональных возможностей приложения. Данный вопрос наиболее полно исследован Дэном Эпплманом, написавшим книгу «Visual Basic Programmer’s Guide to the Win32 API».

Недостатки

• Поддержка операционных систем только семейства Windows и Mac OS X (Исключение — VB1 for DOS).

• Отсутствие полноценного механизма наследования реализации объектов. Существующее в языке наследование позволяет наследовать только интерфейсы, но не их реализацию.

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

Язык сильно привязан к своей среде разработки и к операционной системе Microsoft Windows, являясь исключительно инструментом написания Windows-приложений. Привязка к среде заключается в том, что существует большое количество средств, предназначенных для помощи и удобства программирования: встроенный отладчик, просмотр переменных и структур данных на лету, окно отладки, всплывающие подсказки при наборе текста программы (IntelliSense). Все эти преимущества делают бесполезным и даже невозможным использование Visual Basic вне среды разработки, например в обычном текстовом редакторе

Критика(вывод)

• Часто критике подвергаются такие аспекты Visual Basic, как возможность отключить средства слежения за объявленными переменными, возможность неявного преобразования переменных, наличие типа данных «Variant». С другой стороны, это можно рассматривать как плюс, так как VB не навязывает «хороший стиль», а даёт больше свободы программисту.

• Отсутствие указателей, низкоуровневого доступа к памяти, ASM-вставок, невозможность экспорта функций в нативных библиотеках, отсутствие стандартных средств разработки консольных приложений. И хотя, используя недокументированные возможности и определённые ухищрения, всё это можно реализовать и на VB (например, с помощью функций для получения указателей VarPtr, StrPtr и ObjPtr); пользоваться этими трюками иногда сложнее, чем, например, на С++.

Однако стоит отметить, что все недостатки языка вытекают из его основного достоинства — простоты разработки графического интерфейса. Поэтому многие программисты используют Visual Basic для разработки интерфейса пользователя, а функциональность программы реализуют в виде динамически подключаемых библиотек (DLL), написанных на других языках (например, C++).

Список использованной литературы

http://studentbank.ru/view.php?id=11130

https://ru.wikipedia.org/wiki/Visual_Basic

http://www.lessons-tva.info/edu/e-inf2/m2t3_7.html

http://progopedia.ru/dialect/visual-basic/

Наши рекомендации