Вызовы конвенций
При объявлении процедуры или функции вы можете использовать один из следующих индикаторов для указания вызовой соглашения: Register, Pascal, CDECL, STDCALL и SafeCall. например,
Функция мифункции (x, y: real): Real;
...
Призывные конвенции определяют порядок, в котором параметры передаются в подпрограммы, и они также влияют на использование регистров при удалении параметров из стека, передачи параметров и обработки ошибок и исключений. Конвенция по вызову по умолчанию является регистрацией.
• Регистрационные и паскальские вызовы проходят параметры слева направо, то есть самые левые параметры рассчитываются и передаются в самые ранние, а самые правые параметры наконец рассчитываются и проходят;
• В дополнение к вызовам CDECL, процедурам и функциям удаляют параметры из стека перед возвращением, в то время как CDECL использует, когда вызов возвращается, вызывающий абонент удаляет параметры из стека;
• Регистрационные вызовы могут передавать параметры, используя до 3 регистров ЦП, в то время как другие вызовы используют стек для передачи параметров;
• Вызов SafeCall реализует исключение «брандмауэр», который реализует межпроцессное уведомление об ошибке COM в Windows.
В следующей таблице суммируется конвенции при вызове:
------------------------------------------------------ ------------------------------------------------
-Индикаторные слова ---------------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ---? |
--register --------------- слева направо --------- Рутина ----------------- Да --------------------- ||
-Pascal --------------- ------------------------- |
-cdecl ----------------- --- Нет ---------------------------- |
-stdcall ---------------- --- Нет ------------------------- |
-Safecall --------------- Право к лету ---------- Рутина ----------------- --- Нет ---------------------- |
------------------------------------------------------ -----------------------------------------------
Вызов регистрации по умолчанию является наиболее эффективным, поскольку он обычно избегает создания кадры стека (регистр должен использоваться при доступе к опубликованным свойствам); Рекомендуются STDCALL и SAFECALL. В Windows System API использует STDCALL и SAFECALL, в то время как в других операционных системах обычно используются CDECL (обратите внимание, что STDCALL более эффективен, чем CDECL).
Методы, которые объявляют двойные интерфейсы, должны использовать SafeCall; Для получения дополнительной информации о вызовной конвенции см. В управлении программой.
Индикаторы вблизи, далеко и экспорт используются в 16-битном программировании Windows, и они не влияют на 32-разрядные программы, и они сохраняются для обратной совместимости.