ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

Определение Внешних Функций


Когда ObjectARX-приложение получает запрос kLoadDwgMsg от AutoCAD, это должно определить все его внешние функции,  вызывая acedDefun () однажды для каждой функции. AcedDefun () запрос связывает имя внешней функции (прошел как строковое значение) с целочисленным кодом, который является уникальным в пределах приложения. Целочисленный код не должен быть отрицателен, и это не может быть большее чем 32,767 (другими словами, код - короткое целое число).

Следующий запрос к acedDefun () определяет, что AutoLISP признает, что внешняя функция вызвала doit в AutoLISP, и что, когда AutoLISP вызывает doit, это передает функциональный нуль кода (0) к ObjectARX-приложению:

AcedDefun ("doit", 0);

Строка, которая определяет имя новой внешней функции, может быть любое имеющее силу имя символа AutoLISP. AutoLISP преобразовывает это к всему верхнему регистру и сохраняет это как символ типа Exsubr.

Внешние функции определены отдельно для каждого открытого документа в MDI. Функция определяется, когда документ становится активным. Для подробной информации, см. главу 16, “ Многодокументная среда. ”

ПРЕДУПРЕЖДЕНИЕ! Если два или больше ObjectARX-приложения определяют функции (в том же самом документе) которые имеют то же самое имя, AutoLISP признает только наиболее недавно определенную внешнюю функцию. Предварительно загруженная функция будет потеряна.

Это может также случаться, если пользователь вызывает defun с противоречивым именем.

Как в AutoLISP, новая функция может быть определена как команда AutoCAD приписыванием ее имя с “ C: ” или “ c: ”, как показано в следующем примере:

AcedDefun ("C:DOIT", 0);

В этом случае, DOIT может теперь быть вызван от Приглашения ко вводу команды AutoCAD без того, чтобы включить его имя в круглых скобках.

Функции, определенные как команды AutoCAD могут все еще быть вызваны от выражений AutoLISP, при условии, что “ C: ” префикс включен как часть их названий.

Например, учитывая предыдущий acedDefun () запрос, пользователь AutoCAD мог также вызывать команду DOIT как функция с параметрами:

Команда: (c:doit x y)

ПРЕДУПРЕЖДЕНИЕ! Если приложение определяет команду C:XXX, чей конфликты имен со встроенной командой или именем команды, определенным в acad.pgp файле, AutoCAD не признает внешнюю функцию как команда. Функция может все еще вызываться как AutoLISP внешняя функция. Например, после запроса acedDefun ("c:cp", 0), ввод пользователя cp (псевдоним для COPY, определенного в acad.pgp) вызывает команду COPY AutoCAD, но пользователь мог вызывать внешнюю функцию с c:cp.

ОБРАТИТЕ ВНИМАНИЕ Имена функции, определенные acedDefun () могут быть неопределены,  вызывая acedUndef (). После того, как функция была неопределена, попытка вызывать это вызывает ошибку.



Содержание раздела