Разрабатывая динамическую библиотеку процедур и функций, необходимо
помнить, что к созданной библиотеке могут обращаться приложения, напи-
санные на разных языках и скомпилированные в разных средах программи-
рования. Поэтому при обращении к функциям и процедурам используются
различные способы передачи их параметров. Передача параметров при вы-
зове динамических функций производится через стек или регистры процес-
сора. Помещаемые в стек или регистр параметры могут следовать в различ-
ном порядке. После передачи параметров стек должен очищаться вызы-
вающим процессом или вызываемой процедурой. Поэтому соглашение
о вызовах это способ передачи параметров в вызываемую функцию или
процедуру.
В табл. 18.1 приведены директивы соглашения о вызовах. Таблица 18.1. Директивы соглашения о вызовах
Директива, определяющая тот или иной способ передачи параметров, при-
водится в заголовке процедуры или функции и указывает компилятору со-
глашение о вызовах, применяемое для данной функции. В языке Pascal по
умолчанию всегда используется директива Register. Она определяет, что па-
раметры будут передаваться через регистры процессора, в порядке слева на-
право, и регистры будет очищать вызываемая процедура. Директива Cdecl
указывает компилятору, что вызов функции должен быть осуществлен в
стиле языка С. Параметры загружаются в стек справа налево, затем стек
очищается вызывающим процессом. Директива Pascal извещает компиля-
тор, что необходимо сгенерировать код в стиле языка Pascal. Параметры
процедуры помещаются в стек слева направо, стек очищает вызываемая
процедура. Директивы Stdcall и Safecall, как и Cdecl, указывают компилято-
ру помещать в стек параметры слева направо, но стек очищает вызываемая
процедура, как в случае применения директивы Pascal. Если мы будем ис-
пользовать создаваемую динамическую библиотеку для вызова процедур и
функций из макросов Excel, то лучше в их описании использовать директи-
ву Stdcall:
Function GetDateDialog:variant; Stdcall;
Рассмотрим программный код динамической библиотеки, которую мы бу-
дем использовать в макросах документов MS Excel.
Опубликовал Kest
October 05 2009 14:08:20 ·
0 Комментариев ·
7169 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.