Программирование на Visual Basic

Visual Basic api

Программирование под Windows, это использование сотен специализированных библиотек Windows API, и заключённых в них функций.
Для более-менее опытного программиста на C++ или Pascal"e - это всё легко понимаемая чёткая система. (это подтверждает личный опыт). Но для новичка это жуткие дебри, которые могут отпугнуть (тоже личный опыт). Всё изменил Visual Basic, он обернул эти функции в оболочку объектов языка. Это упростило работу пользующихся им программистов, но лишило их преимуществ использования API. К счастью в VB было предусмотрено импортирование функций из внешних библиотек. Это импортирование может быть прямое и косвенное(оно же "объявление"). В этой статье будет рассмотрено косвенное, по двум причинам. Во-первых оно намного проще прямого в исполнении, а во-вторых чтобы импортировать функцию напрямую из DLL необходимо объявление некоторых функций.
Объявление осуществляется оператором Declare, наследованным от досовской версии Basic. Его полный формат таков:
[Public | Private] Declare Function имя_функции Lib библиотека [ Alias псевдоним ] [ (аргументы) ] [ As тип ]
имя_функции - это специальное имя для использования в VB. Оно может не совадать с именем функции хранящейся в DLL, в этом случае исользуется псевдоним.
библиотека - имя файла библиотеки, из которой имортируется функция. Если не указан путь, файл ищется в системном каталоге или в каталоге приложения импортирующего функцию. Расширение библиотеки можно не указывать, если она загружена в память. Это касается библиотек kernel32.dll, user32.dll, gdi32.dll, которые всегда находятся в памяти компьютера.
псевдоним - это точное имя функции, хранящейся в DLL. Он используется если оно неудобочитаемо или конфликтует с VB.
аргументы объявлеются следующим образом: [ByVal] имя_аргумента As тип . ключевое слово ByVal означает, что параметр передаётся по значению, иначе по ссылке. Это необходимо указать при объявлении функции. тип передаваемого аргумента может быть Long, Byte, Integer, String, а также пользовательским, или Any. Оба последних передаются по ссылке. Any означает, что передаваемый параметр может быть любого типа (не путать с Variant).
Очень важно правильно указать тип возвращаемого значения, так как неправильно указанный тип может вызвать ошибку.
Ключевые слова Public и Private указывают область видимости функции. Public означает, что функция может использоваться в любом файле проекта, а Private делает функцию доступной только в пределах объявившего её файла. Public можно использовать только в модулях. В формах или классах, это вызовет ошибку. При использовании пользовательских типов их область видимости должна совпадать с областью видимости функции.
Для лучшего понимания несколько примеров.

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As LongPrivate Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long


ОЧЕНЬ ВАЖНО четко знать правильное объявление нужной функции. Лучше всего пользоваться справочниками, и специальной литературой.

Hosted by uCoz