Access 2002

Определение параметров функции


Как видите, такое определение параметров функции создает проблему: если третьим параметром вы передаете значение HELP CDNTEXT, то четвертым необходимо передать по значению длинное целое (Long), тогда как в случае HELP_PARTIALKEY четвертым параметром функции должна быть LPSTR-строка. Как же тогда вам объявить четвертый параметр? Помочь в этом может тип данных Any. Собственно говоря, это даже не тип данных, а ключевое слово, сообщающее VBA, что на момент объявления функции вы не знаете ни типа данных аргумента, ни его размера. VBA отложит определение типа аргумента до момента вызова процедуры во время выполнения программы. В результате вся ответственность за правильную передачу аргумента ложится на вас: во время компиляции VBA не сможет этого проверить. Вот как выглядит объявление функции WinHelp в VBA:

Заметьте, что тип данных для аргумента dwData — это Any, и что в его объявлении нет ключевого слова ByVal. Вызывая функцию, вы должны сообщить VBA следующее:

О тип данных аргумента;

О должны ли данные передаваться по ссылке или по значению;

О содержимое аргумента.

Ключевые слова ByVal и ByRef можно включать не только в оператор Declare, но и непосредственно в вызов функции. При этом последнее слово всегда за вызовом.

Функцию WinHelp можно вызвать двумя способами:

В первом вызове в аргументе dwData функции передается "ByVal 3&". Это означает следующее:

О информация передается по значению;

О в стек помещаются четыре байта;

О содержимым этих четырех байтов должно быть число 3.

Ключевое слово ByVal указывает, что аргумент передается по значению. Амперсанд (&) означает, что константа имеет тип Long, а не Integer. Без него в стек были бы помещены только два байта, тогда как функции нужны четыре.

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