Шаг 17 - Win32 API и VBA
На данный момент использование Win32 API является стандартом для любой среды или языка программирования, это и понятно, как иначе писать программы для Windows ? Вместе с тем пользоваться этим же API надо осторожно, реализации в версиях Windows отличаются вплоть до присутсвия некоторых функций. Для того, чтобы использовать функции Win 32 API их необходимо объявить, используя Declare.
В общей области (в описании) надо объявить функцию. Сделать это можно поднявшись на самую верхнюю строчку окна редактирования макроса и ввести описание.
Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal buffer As String, ByVal nSize As Long) As Long
Вот тут-то Вы и должны быть поражены. Говорят VBA это для ...... Так вот. Использовать подобную функцию на VC++ намного проще. Во-первых, Вам наверно всё равно, где она находится :-))) в kernel, user или gdi, и вам вообще-то и не надо знать её имя в виде GetWindowsDirectoryA, а если вы пользуетесь каркасной библиотекой типа MFC, то часто получаете упрощеный вид функции типа AfxMessageBox. Вот и думай теперь чего проще :-))
Давайте на Declare посмотрим повнимательнее. У него два синтаксиса для функции или процедуры.
REM то что в скобках необязательно [Public или Private] Declare Sub имя_процедуры lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)] [Public или Private] Declare Function имя_процедуры lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)] [as тип возврата]
Вот так надо знать где находится и псевдоним, если нужно и все параметры. Вот он язык для домохозяек :-)
А теперь применение. Вот тут все стало опять просто.
Sub Test() Dim buffer As String Dim lens As Long buffer = String(256, 0) lens = GetWindowsDirectory(buffer, Len(buffer)) buffer = Left(buffer, lens) MsgBox (buffer) End Sub
Объявляю переменные, buffer = String(256, 0) - заполняю строку нулями имитируя строку символов char. Зачем ? Ну есть подозрение, что Windows написан на C или ASM, даже без ++ и поэтому другого он не понимает :-), не на бейсике точно. Вызываем функцию, передавая параметры. Полученную строку обрезаем функцией Left.
Наверно лучше создавать описания в отдельном модуле и просто его экспортировать в проект, дабы не мучаться. И, наверно, есть уже готовые модули. Но этот метод позволяет Вам подключить любую динамическую библиотеку. Посмотрите в разделе MFC шаг за шагом : "Шаг 46 - Dll для Excel".
Предыдущий Шаг | Следующий Шаг
Автор Каев Артем.