Тема: передача данных из ARX в LISP

Помогите, опишите как правильно из edit control передать в Лисп. В каких местах Microsoft Visual Studio2005 прописать функции передачи. Диалоговое окно создано, под едиты прописаны переменые. Но как правильно написать и в каких местах функции acedRetReal??

Re: передача данных из ARX в LISP

нужно для оформление диалога на АРХ и забора из него даных для последующей обработки в Вижуал Лиспе

Re: передача данных из ARX в LISP

ДСЛ окна умею оформлять но их параметров мало да и требуют чтоб было из под С++

Re: передача данных из ARX в LISP

Если можно на простом примере один едит_контрол, в обжект_арх_команд создана команда, переменая присвоена едиту допустим m_l1 как теперь ее значение передать в Лисп. С уважением Олександр.

Re: передача данных из ARX в LISP

1) Через acedRetReal можно передать только одно значение.
2) Функции acedRetXXX имеют смысл только в функциях зарегистрированнных через acedDefun, а не в командах.
3) Попробуй воспользоваться функцией acedPutSym, которая позволяют записать значения lisp-переменных.

Re: передача данных из ARX в LISP

Под функцию lu18 написал такой код(в переменую mk в Лиспе запишется число 12, перед етим в лиспе ету переменую создал[вроде так понимаю то что наваял :))]), когда вызываю функцию в Лиспе выдается сообщение об ошибке  заголовок "Исключение в команде lu18ARX"
текст  "Необрабатываемое исключение 80000003 (80000003h) по адресу 7С901230h" Автокад руский 2008(руский - не русифицированый)
Помогите пожалуста разобратся что не так делаю.
С уважением Олександр, спасибо Александру Ревилису за отзыв(за трату своего времени).
// ----- ads_lu18 symbol (do not rename)
    static int ads_lu18(void)
    {
        //----- Remove the following line if you do not expect any argument for this ADS function
        //struct resbuf *pArgs =acedGetArgs () ;
        // TODO: add your code here
     struct resbuf *rd;
     int rc;
     const ACHAR  *mk;
     rd = acutBuildList(RTREAL, 12, 0);
     rc = acedPutSym(mk, rd);

Re: передача данных из ARX в LISP

rc = acedPutSym(_T("mk"), rd);

Re: передача данных из ARX в LISP

Изменил как Вы написали, но в Лиспе переменой mk новое значения не присваивается. Немогу сообразить в чем дело.

Re: передача данных из ARX в LISP

Приведи полностью код функции ads_lu18 и как ты ее вызваешь из AutoCAD. Вызов должен быть огранизован как для lisp-функции:

(lu18)

Re: передача данных из ARX в LISP

// ----- ads_lu17 symbol (do not rename)
    static int ads_lu17(void)
    {
        //----- Remove the following line if you do not expect any argument for this ADS function
        //CAcModuleResourseOverride resOverride;
         struct resbuf *rd;
          const ACHAR  *mk;
         int  rc;
        rd = acutBuildList(RTREAL, 15, 0);
        rc = acedPutSym(_T("mk"), rd);
                    l17dlg dlg;
            dlg.DoModal();
        return (RSRSLT) ;
    }
ето в Лиспе
(setq mk 1)
(arxload "D:\\Proekt\\l17\\Win32\\Debug\\l17.arx" "hhh")
(lu17)
так и 1 не меняется

Re: передача данных из ARX в LISP

в конце кода функции я еще окно вызывал но и закоментировав его вывод ничего не меняет

Re: передача данных из ARX в LISP

У тебя какая-то халтура. Проверил:

  // ----- ads_set_mk symbol (do not rename)
  static int ads_set_mk(void)
  {
    double mk = 12.0;
    resbuf *rb = acutBuildList(RTREAL,mk,0);
    acedPutSym(_T("mk"),rb);
    acutRelRb(rb);
    acedRetReal(mk);
    return (RSRSLT) ;
  }

И вызов:

Command: (set_mk) 12.0
Command: !mk 12.0
Command: (setq mk 1) 1
Command: (set_mk)
12.0
Command: !mk
12.0

Re: передача данных из ARX в LISP

P.S.: А ты не забываешь выгружать предыдущую версию arx-файла? В отличие от lisp-файлов один и тот же arx-файл нельзя загрузить дважды - сначала его нужно выгрузить (arxunload ...)

Re: передача данных из ARX в LISP

Огромнейшее Человеческое спасибо Вы спасли меня, а дело вот в чем проверил
если вместо мк поставить число Вот так то тогда не работает, точнее не меняет в лиспе мк.
resbuf *rb = acutBuildList(RTREAL,12,0);
    acedPutSym(_T("mk"),rb);
    acutRelRb(rb);
а вот ета строчка все спасает
double mk = 12.0;
ну и соответсвено перепреоделение
resbuf *rb = acutBuildList(RTREAL,mk,0);

Re: передача данных из ARX в LISP

Нет я выгружал еще раз спасибо за ту работу какую Вы делаете

Re: передача данных из ARX в LISP

Но вот новый вопрос, извините за назойливось пишу такой код, m_l1 ето переменая типа доубле которая описивает поле едит_контрол, ну думаю теперь и сам разберусь как с етдита передать в переменую мк но не тут то было, Кад снова выдает сообщение
Необрабатываемое исключение 80000003 (80000003h) по адресу 7С901230h
double m_l1; написал потому что компилятор выдавал незнает такой переменои, хотя я ее описал когда додавал ее к поле едит_контрол.
    static int ads_lu17(void)
    {
l17dlg dlg;
            dlg.DoModal();
  double m_l1;
double mk=m_l1;
    resbuf *rb = acutBuildList(RTREAL,mk,0);
    acedPutSym(_T("mk"),rb);
    acutRelRb(rb);

Re: передача данных из ARX в LISP

Так тоже работает:

resbuf *rb = acutBuildList(RTREAL,12.0,0);

Смысл в том, что функция acutBuildList имеет переменное число параметров и тип параметра она понимает по предыдущему. Т.е. если RTREAL, то следующим она ожидает double, а не int. Кстати, и rb в этом случае == 0, и сообщение появлется:

Invalid type in acutBuildList() arg #5

Re: передача данных из ARX в LISP

> Олександр
1) Посеял:

CAcModuleResourseOverride resOverride;

2) Переменная m_l1 находится в классе l17dlg, и если она описана как public, то из функции ads_lu17 ты можешь к ней обращаться через dlg.m_l1
3) В каком месте происходит необрабатываемое исключение? Диалог на экране появляется?

Re: передача данных из ARX в LISP

А Вы закоментируйте
//acedRetReal(mk);
и 12 поставте без крапки и работать не будет проверил
вот так
  resbuf *rb = acutBuildList(RTREAL,12,0);
    acedPutSym(_T("mk"),rb);
    acutRelRb(rb);
//acedRetReal(mk);

Re: передача данных из ARX в LISP

До диалог появлялся так как вызов идет сперва а ошибка выбивала после нажатия на кнопку ок,
а когда диалог был на екране он работал, я в нем написал 2 числа мнодатся и виводятся в з едит.

Re: передача данных из ARX в LISP

dlg.m_l1 все спасло, работает нет слов благодарности,
а на CAcModuleResourseOverride resOverride;
static int ads_lu17(void)
    {
CAcModuleResourseOverride resOverride;
        l17dlg dlg;
            dlg.DoModal();
  //double m_l1;
double mk=dlg.m_l1;
    resbuf *rb = acutBuildList(RTREAL,mk,0);
   acedPutSym(_T("mk"),rb);
    acutRelRb(rb);
выдает вот ето, а без  CAcModuleResourseOverride resOverride; все работает
d:\proekt\l17\acrxentrypoint.cpp(98) : error C2065: 'CAcModuleResourseOverride' : undeclared identifier
d:\proekt\l17\acrxentrypoint.cpp(98) : error C2146: syntax error : missing ';' before identifier 'resOverride'
d:\proekt\l17\acrxentrypoint.cpp(98) : error C2065: 'resOverride' : undeclared identifier
Build log was saved at "file://d:\Proekt\l17\Win32\Debug\BuildLog.htm"

Re: передача данных из ARX в LISP

А почему Вы книг не пишете, например в соавторстве с Полещуком у Вас опыта хватает и примеров, хорошие были бы книги

Re: передача данных из ARX в LISP

> Олександр
1) Ты не внимательно прочитал то, что я написал выше и мои объяснения: > Александр Ривилис (2008-11-19 12:23:57)
2) Я не телепат и угадать где у тебя в классе l17dlg ошибка я не могу. sad Приведи его код полностью (и не забудь вставить его в теги:
[code]
...здесь твой код...
[/code] - иначе я все-равно не пойму.
3) Получилось - и слава Богу. Я скопировал из твоего кода CAcModuleResourseOverride не посмотрев что у тебя описка. Должно быть: CAcModuleResourceOverride.
4) Мои примеры есть в книге Николая Николаевича (на CD к книге).

Re: передача данных из ARX в LISP

так точно описка с буквой с, все заработало
и извенения за невнимательность
Вы сберегли мне уйму времени,и спасли мою бакалаврскую работу. Еще раз спасибоооооооооооооооооо!!!

Re: передача данных из ARX в LISP

> Олександр
Где (если не секрет) требуют использовать ObjectARX? Случайно не Киевский политех?