天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 9|回复: 0

ObjectARX调用LISP方法(含参数传递)返回值

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    ObjectARX调用LISP方法(含参数传递)返回值

    //acrxEntryPoint.cpp

    void Test()
    {
    struct resbuf *ptList,*ptResult=NULL;
    //注意,一定要写成_T(“c:lisp_test”),写成”c:lisp_test”调用会失败
    double dx=135.6;
    double dy=147.5;
    ptList=acutBuildList(RTSTR,_T(“c:lisp_test”),RTREAL,dx,RTREAL,dy,RTNONE);
    int rc=acedInvoke(ptList,&ptResult);
    if(rc!=RTNORM)
    {
    acutPrintf(_T(“\r\n调用LISP失败,请检查依赖的LISP是否加载”));
    acutRelRb(ptList);
    return;
    }
    acutRelRb(ptList);
    if(ptResult==NULL)
    {
    acutPrintf(_T(“\r\n调用LISP失败,返回空值”));
    return;
    }
    if(ptResult->restype!=RTSTR)
    {
    acutPrintf(_T(“\r\n调用LISP失败,返回错误的值类型”));
    acutRelRb(ptResult);
    return;
    }
    CString strRC=ptResult->resval.rstring;
    acutRelRb(ptResult);
    acutPrintf(_T(“\r\n返回值:%s”),strRC);
    }
    //—————————————————————————–
    //—– ObjectARX EntryPoint
    class CInvokeLispTestApp : public AcRxArxApp {

    public:
    CInvokeLispTestApp () : AcRxArxApp () {}

    virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
    // TODO: Load dependencies here

    // You *must* call On_kInitAppMsg here
    AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
    acedRegCmds->addCommand(_T(“InvokeLispTestApp”),_T(“Test”),_T(“Test”),0,Test);

    // TODO: Add your initialization code here

    return (retCode) ;
    }

    virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
    // TODO: Add your code here

    // You *must* call On_kUnloadAppMsg here
    AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;

    // TODO: Unload dependencies here
    acedRegCmds->removeGroup(_T(“InvokeLispTestApp”));

    return (retCode) ;
    }

    virtual void RegisterServerComponents () {
    }

    } ;

    //—————————————————————————–
    IMPLEMENT_ARX_ENTRYPOINT(CInvokeLispTestApp)



    //InvokeLispTest.lsp

    ;;定义函数lisp_test
    ;;函数有两个参数x,y
    ;;函数名必须写成c:xx否则ARX无法调用
    (defun c:lisp_test(x y)
    ;;将X转换成字符串
    (setq strX(rtos x 2 10))
    ;;将Y转换成字符串
    (setq strY(rtos y 2 10))
    ;;将X,Y转换的字符串合并起来,并返回给ARX函数
    ;;返回给ARX调用
    ;;LISP最后一个运算的返回值做为函数的返回值
    (setq strXY(strcat strX “|” strY))
    )

     

     

     

     

    ObjectARX调用LISP方法(含参数传递)返回值
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:51 , Processed in 0.056971 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表