Шаг 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".


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



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