明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3710|回复: 6

[命令] 如何用C#调用lisp程序命令啊

[复制链接]
发表于 2013-11-1 16:34:19 | 显示全部楼层 |阅读模式
我想用C#驱动lisp代码或是lisp做成的fas程序,这样写为何总是不成功啊,不知如何写呢:
[CommandMethod("MYPOLY")]
        public void MyPoly()
        {
            //设置标记并发送PLINE         
            Document doc = Application.DocumentManager.MdiActiveDocument;
            doc.SendStringToExecute("_appload  @"D:\s.lsp") ",false,false,false);

        }


发表于 2013-11-1 19:10:19 | 显示全部楼层
    /// <summary>
    /// 调用Lisp函数
    /// Version:2012.03.01 Sieben
    /// 注1:Lisp函数需要使用vl-acad-defun 进行注册才能从外部调用
    /// Exm:
    /// Lisp 的函数定义和注册
    /// (defun testfunc (a) (princ "\nTESTFUNC called:" ) (prin1 a) )
    /// (vl-acad-defun 'testfunc)
    /// 调用Lisp函数举例
    /// ResultBuffer args = new ResultBuffer();
    ///        int stat = 0;
    /// args.Add(new TypedValue((int)LispDataType.Text, "testfunc"));
    /// args.Add(new TypedValue((int)LispDataType.Text, "abc"));
    ///InvokeLispFun(args, ref stat);
    /// </summary>
    /// <param name="resBuf">输入链表,表头应该是Lisp函数名,后面是Lisp函数实参</param>
    /// <param name="status">Lisp函数返回状态,成功返回RTNORM(5100),失败返回NULL(0)</param>
    /// <returns>Lisp函数的返回值</returns>
    public static ResultBuffer InvokeLispFun(ResultBuffer resBuf, ref int status)
    {
      IntPtr rb = IntPtr.Zero;
      status = acedInvoke(resBuf.UnmanagedObject, out rb);
      if (status == (int)PromptStatus.OK && rb != IntPtr.Zero)
      {
        return (ResultBuffer)DisposableWrapper.Create(typeof(ResultBuffer), rb, true);
      }
      else
      {
        return null;
      }
    }
发表于 2013-11-1 19:11:42 | 显示全部楼层
    [System.Security.SuppressUnmanagedCodeSecurity]
    [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl)]
    extern static public  int acedInvoke(IntPtr args, out IntPtr result);
发表于 2013-11-1 19:15:52 | 显示全部楼层
至于ObjectARX.Net对Lisp装载,我也没搞过,也没搞明白
我碰到过一个这样的问题,即在dll初始化过程即Initialize()函数里面无法调用Lisp函数,即使过程显示Lisp文件已经装载.Initialize()执行完之后,命令开始前可以调用Lisp函数
发表于 2014-3-5 21:28:21 | 显示全部楼层
发表于 2014-3-19 20:59:28 | 显示全部楼层
另外提供两种方法,.net程序中同步地调用command:
http://www.cnblogs.com/swtool/p/SWTOOL_00012.html
发表于 2014-3-25 15:30:22 | 显示全部楼层
建议看一下 http://bbs.mjtd.com/thread-109357-1-1.html   , 这样可以同步调用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-29 06:41 , Processed in 0.169020 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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