Оценка Внешних Функций
Как только внешняя функция была определена, AutoLISP может вызывать это с запросом kInvkSubrMsg. Когда ObjectARX-приложение получает этот запрос, это отыскивает целочисленный код внешней функции, вызывая acedGetFunCode (). Тогда инструкция выключателя, условный оператор, или таблица с функциональным запросом могут выбирать и вызывать обозначенный функциональный обработчик. Это - функция, что ObjectARX-приложение определяет, чтобы осуществить внешнюю функцию. Обратите внимание, что имя обработчика и имени, определенного acedDefun () (и поэтому признанный AutoLISP) - не обязательно то же самое имя.
Если функциональный обработчик ожидает параметры, это может отыскивать их значения, вызывая acedGetArgs (), который возвращает указатель на список связей буферов результатов, которые содержат значения, прошел от AutoLISP. Если обработчик не ожидает никакие параметры, не требоваться вызвать acedGetArgs () (это может делать так так или иначе, проверять, что никак параметры не пропускали). Поскольку это отыскивает его параметры от списка связей, функциональный обработчик может также осуществлять списки параметров переменной длины или изменяющиеся типы параметра.
ОБРАТИТЕ ВНИМАНИЕ, что функциональный обработчик должен проверить номер, и тип параметров прошел к этому, потому что не имеется никакого способа сообщить AutoLISP, каковы требования.
Функциональные обработчики, которые ожидают параметры, могут быть написаны так, чтобы они запросили пользователя относительно значений, если acedGetArgs () возвращает список параметров NULL. Эта методика часто применяется к внешним функциям, определенным как команды AutoCAD.
Группа функций ObjectARX известный как функции возвращения значения (типа acedRetInt(), acedRetReal(), и acedRetPoint()) позволяет внешней функции возвратить значение выражению AutoLISP, которое вызвало это.
Параметры, которые пропускают между внешними функциями и AutoLISP, должны оценить к одному из следующих типов: целое число, реальный (с плавающей точкой), строковый, точка (представленный в AutoLISP как список двух или трех реальных значений), имени примитива, имени набора выбора, символы AutoLISP t и nil, или список, который содержит предыдущие элементы. Символы AutoLISP к другие чем t и nil не пропускают или от внешних функций, но ObjectARX-приложения, могут отыскивать и устанавливать значение символов AutoLISP, вызывая acedGetSym () и acedPutSym ().
Если, например, внешняя функция в ObjectARX-приложении вызвана со строкой, целым числом, и реальным параметром, версия AutoLISP такой функции может быть представлена следующим образом:
( Doitagain pstr iarg rarg)
Принимая, что функция была определена acedDefun(), пользователь AutoCAD может вызывать это со следующим выражением:
Команда: (doitagain “ Стартовая ширина - ” 3 7.12)
Этот запрос снабжает значениями для строки функции, целого числа, и вещественного числа
Параметры, к которым doitagain () функциональный обработчик отыскивает запросом
AcedGetArgs (). Для примера поиска параметров таким образом, см. первый пример в “ Списки и Другие Динамически Размещенные Данные ” на странице 546.