На данный момент использование 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".