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


         

Связь между Приложениями - часть 3


AcedGetArgs () запрос перемещен, чтобы быть в пределах функционального fact(). Указатель буфера результата rb сделан переменной скорее чем параметр. (Это не соответствует запросу к fact () в dofun () функция. Если все внешние функции зарегистрированы, поскольку этот пример принимает, dofun () функция может быть удалена полностью; см. примечание, которое следует за этим примером.) новый код показывается в типе жирного начертания:

static int fact()

{

int x;

struct resbuf *rb;

rb = acedGetArgs();

if (rb == NULL)

return RTERROR;

if (rb->restype == RTSHORT) {

x = rb->resval.rint; // Save in local variable.

} else {

acdbFail("Argument should be an integer.");

return RTERROR;

}

if (x < 0) { // Check the argument range.

acdbFail("Argument should be positive.");

return RTERROR;

} else if (x > 170) { // Avoid floating-point overflow.

acdbFail("Argument should be 170 or less.");

return RTERROR;

}

acedRetReal(rfact(x)); // Call the function itself, and

// return the value to AutoLISP.

return RTNORM;

}

Сопоставимое изменение было бы должно быть сделано к squareroot().

ОБРАТИТЕ ВНИМАНИЕ, вызывает ли приложение acedRegFunc() чтобы регистрировать обработчик для каждой внешней функции, это определяет, это может предполагать, что эти функции будут вызваны acedInvoke(), и это может опустить kInvkSubrMsg случай acrxEntryPoint () функция. Если Вы проектируете приложение, которое требует больше чем единственный файл кода ObjectARX, эта методика предпочтительна, потому что это размещает бремя обработки функции, вызывает ObjectARX библиотеку скорее чем на acrxEntryPoint() функцию.

Если функциональный запрос начинает последовательность запроса, которая заставляет функцию в том же самом приложении быть вызванной с acedInvoke (), последняя функция должна быть зарегистрирована acedRegFunc(). Если вызванная функция не зарегистрирована, acedInvoke () сообщает о ошибке. Следующий рисунок иллюстрирует эту ситуацию:




Содержание  Назад  Вперед