2006 г.
Биллиг Владимир Арнольдович
Интернет-Университет Информационных Технологий, INTUIT.ru
Назад Оглавление Вперёд
Две кодировки ANSI и Unicode
Win32 API функции могут существовать в двух вариантах, ориентированных на две кодировки - ANSI, когда символы строк кодируются одним байтом, и Unicode, предполагающей двухбайтную кодировку. По этой причине в DLL
возможны три варианта для имен функций:
Имя
. В этом случае кодировка не играет значения.ИмяA
. Окончание A
означает, что функция использует ANSI кодировку.ИмяW
. Окончание W
(от Wide) свидетельствует об Unicode кодировке.
Чтобы выбрать функцию в нужной кодировке, нужно правильно задать Alias
имя функции. Заметьте, что в VBA вызываются функции Win32 в ANSI кодировке, поэтому следует выбирать имена с окончанием A
в тех случаях, когда при вызове функции используются строки и кодировка имеет значение.
API Viewer
Мы уже говорили об одной из основных проблем, возникающих при вызове Win32 API функций, - необходимо обеспечить корректное задание оператора Declare
, описание типов данных и констант, для чего нужно уметь корректно транслировать описание этих объектов из языка C в язык VBA. Чтобы облегчить решение этой задачи, можно воспользоваться специальным инструментальным средством, называемым API Viewer. Это средство доступно в поставке Office 2000 Developer и в Microsoft Visual Basic. Этот обозреватель позволяет:
- Загрузить прилагаемый текстовый файл Win32API.txt, содержащий информацию обо всех используемых при вызовах Win32 API константах, типах, функциях и операторах
Declare
. - Преобразовать этот файл в базу данных Access - Win32API.mdb файл, что позволяет ускорить работу, работать с формами и запросами к базе данных.
- Получить корректную для VB и VBA форму записи операторов
Declare
. - Получить корректную для VB и VBA форму записи типов данных.
- Получить корректную для VB и VBA форму записи констант.
Взгляните на начальный этап работы с обозревателем, где выбирается текстовый файл для просмотра. Обратите внимание, что обозреватель позволяет работать с текстовыми файлами, содержащими информацию о различных интерфейсах, в частности Win32 и Mapi интерфейсах:
Рис. 6.1. Выбор файла Win32API для просмотра в API Viewer
На следующем рисунке можно увидеть результаты нашей дальнейшей работы с API Viewer. Вначале из верхнего выпадающего списка API Types мы выбрали элемент Declares
, в окне Available Items из списка поочередно выбрали интересующие нас функции Win32 API, - соответствующая этим функциям корректная форма записи оператора Declare
появилась в окне Selected Items. На следующем шаге из верхнего списка был выбран элемент Types, из списка типов был выбран тип, в нашем примере MenuItemInfo
, и корректное для VBA его определение появилось в окне Selected Items
. Аналогично, можно получить корректное определение констант. Обычная технология Copy - Paste
позволяет перенести информацию непосредственно в программу VBA. Взгляните, как выглядят окна обозревателя на этом этапе работы:
Рис. 6.2. Получение корректной формы записи оператора Declare в окне API Viewer
Хотя, несомненно, обозреватель полезен, у него есть один недостаток. Было бы полезнее, если бы выбрав имя функции из списка, вся необходимая для вызова этой функции информация, - оператор Declare
, типы и константы, - была бы собрана в одном месте. Это, однако, не делается и потому необходимо обращаться к документации по соответствующей функции. Это может быть "Справочник программиста Win32", если он доступен для Вас. Возможно, проще найти эту информацию на сервере Microsoft, созданном для разработчиков: http://msdn.microsoft.com/
Для того чтобы получить справку по функции Win32 API, следует воспользоваться режимом Search
. В окне поиска следует набрать имя нужной функции, предварительно задав требуемую область поиска. При задании области поиска необходимо, по крайней мере, включить флажки Platform SDK Documentation и Others SDK Documentation. При расширении этой области можно получить не только описание функций, но и статьи с примерами их использования. Заметьте, на этом сервере Вы всегда найдете много полезной информации.
Назад Оглавление Вперёд