Access 2002

ANSI-вызовы функций


Очень часто программисты переименовывают ANSI-вызовы функций Windows API для того, чтобы удалить из имен функций окончание «А» (скажем, переименовать Fi ndWi ndowA в FindWindow). Это окончание указывает, что в качестве аргументов функции передаются строки ANSI. (О функциях ANSI и Unicode подробно рассказывается далее в разделе «Unicode — ANSI — Unicode».)

Описание аргументов

Аргументы передаются функциям DLL через стек. DLL ожидает, что эти аргументы будут помещены в стек в определенном порядке и будут иметь положенный размер. О том, какие аргументы и в каком порядке нужно помещать в стек, VBA узнает из вашей инструкции Declare. В стеке все аргументы представляют собой просто набор байтов. DLL разбивает их на группы и декодирует, а потом передает вызванной вами функции получившиеся параметры. Если в операторе Declare параметры описаны неправильно, VBA поместит в стек не то, что нужно, и DLL получит неверную информацию или даже считает из стека данные, относящиеся к предыдущему вызову.

Правильное описание аргументов является сложнейшей частью вызова DLL из VBA. Этой теме и посвящен следующий раздел.

Преобразование объявлений С в объявления VBA

Большинство DLL написаны на С или C++. Их документация обычно имеет форму заголовочного файла С (.h-файла), в котором указаны типы аргументов всех экспортируемых DLL функций. Каждому типу данных С соответствует эквивалентный тип данных VBA. В  14.1, какими типами данных нужно заменять стандартные типы данных С в объявлениях DLL-функций в вашей программе.

Более подробные сведения о вызовах DLL-функций

Мы обсудили большую часть того, что нужно знать о вызовах DLL. Однако если вы хотите лучше владеть этой технологией, вас наверняка интересует, что происходит в ходе такого вызова. Об этом мы и поговорим в оставшейся части главы.

Комментарии закрыты