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



         

Связь между Приложениями


Функция ObjectARX acedInvoke () в одном приложении используется, чтобы вызвать внешние функции, определенные и осуществленные другими приложениями ObjectARX.

Внешняя функция, вызванная acedInvoke() должна быть определена в настоящее время загруженным ObjectARX-приложением.

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

ПРЕДУПРЕЖДЕНИЕ! Поскольку приложения, загруженные в то же самое время не могут иметь двойные имена функции, Вы должны брать это во внимание при проектировании приложения, которое использует больше чем единственный программный файл; избегите проблемы со схемой обозначения или соглашением, которое гарантирует, что имя каждой внешней функции будет уникально. Лучшее решение состоит в том, чтобы использовать ваш Зарегистрированный Символ Разработчика (RDS) как префикс.

Имя внешней функции, и любых значений параметра, которых это требует, пропускают к acedInvoke() в форме списка связей буферов результатов. Это также возвращает его результат в списке буфера результата; второй параметр к acedInvoke () - адрес указателя буфера результата.

Следующая типовая функция вызывает acedInvoke () чтобы вызвать факт функции факториала () в типовой программе fact.cpp:

static void test()

{

int stat, x = 10;

struct resbuf *result = NULL, *list;

// Get the factorial of x from file fact.cpp.

list = acutBuildList(RTSTR, "fact", RTSHORT, x, RTNONE);

if (list != NULL) {

stat = acedInvoke(list, &result);

acutRelRb(list);

}

if (result != NULL) {

acutPrintf("\nSuccess: factorial of %d is %d\n", x, result->resval.rint);

acutRelRb(result);

}

else

acutPrintf("Test failed\n");




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