Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Беседа о функциях
Пробное обновление Windows ...

При написании программ, часто возникает такая ситуация, когда необходимо одну и ту же последовательность команд использовать в разных частях программы. Было бы неразумным дублировать ее в каждом таком месте. Вместо этого последовательность оформляют отдельным блоком и помещают в самый конец программы, а в те места, где она используется, ставят "ссылки" на этот блок. Такой блок называют функцией, а "ссылки" на него - вызовами функции. Все, кажется, понятно, кроме одного: в разных частях программы функция должна работать с разными данными, следовательно, в функцию их надо как-то передать. Такие данные называются аргументами этой функции. Рассмотрим описание вызова функции на примере MessageBoxA():


MessageBoxA (hWnd, lpText, lpCaption, uType); 

здесь hWnd, lpText, lpCaption, uType - аргументы функции.

Аргументы в функцию передаются через стек. В программе это выглядит следующим образом:


некоторый код
...
push 20h                <-передача аргумента uType
push 00440010           <-передача аргумента lpCaption
push 0044003E           <-передача аргумента lpText
push ebx                <-передача аргумента hWnd
call USER32!MessageBoxA <-вызов функции MessageBoxA()
...
продолжение программы

Мы с Вами в основном будем иметь дело с функциями Win32 API. Win32 API (Application Programming Interface) - набор функций (и не только, но сейчас нас интересуют именно функции), которые Windows предоставляет разработчику для использования в своих программах при создании интерфейса (в данном случае это слово означает взаимодействие) с ОС (Операционная Система). Все Win32 API функции располагаются в .dll файлах (специальные библиотеки функций, динамически подключаемые к программе при ее выполнении, разговор о них еще впереди).

Для API-функций приняты следующие соглашения:

  • Аргументы в функцию передаются в обратной последовательности (сначала последний аргумент, затем - предпоследний и т.д.)
  • Коррекция стека производится самой функцией

Поясним пункт 2. Как Вы, наверное, знаете, при помещении чего-либо в стек, после нужно это обязательно из стека забрать, иначе дальнейшее выполнение программы будет неверным и вскоре она выдаст сообщение об ошибке. Процесс удаления со стека аргументов, переданных в функцию, называется коррекцией стека. Эта операция может производиться либо внутри самой функции (в самом ее конце), либо сразу после вызова функции в том месте программы, откуда этот вызов осуществлялся. Во всех API-функциях коррекция стека производится внутри самих этих функций.

Кроме передачи данных в функцию, она сама тоже должна что-то возвращать в программу. Возвращаемое функцией значение (обычно одно, но бывает и больше, о таких случаях мы поговорим, когда они встретятся нам в какой-нибудь программе) передаются в регистре eax.

Вот, в общем-то, и все, что Вы пока должны знать о функциях. Дополнительная информация будет даваться в следующих статьях, по мере необходимости.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay