iamygp 发表于 2013-11-1 16:34:19

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

我想用C#驱动lisp代码或是lisp做成的fas程序,这样写为何总是不成功啊,不知如何写呢:

      public void MyPoly()
      {
            //设置标记并发送PLINE         
            Document doc = Application.DocumentManager.MdiActiveDocument;
            doc.SendStringToExecute("_appload@"D:\s.lsp") ",false,false,false);

      }


sieben 发表于 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;
      }
    }

sieben 发表于 2013-11-1 19:11:42

   
   
    extern static publicint acedInvoke(IntPtr args, out IntPtr result);

sieben 发表于 2013-11-1 19:15:52

至于ObjectARX.Net对Lisp装载,我也没搞过,也没搞明白
我碰到过一个这样的问题,即在dll初始化过程即Initialize()函数里面无法调用Lisp函数,即使过程显示Lisp文件已经装载.Initialize()执行完之后,命令开始前可以调用Lisp函数

SWAYWOOD 发表于 2014-3-5 21:28:21

http://hi.baidu.com/swaywood/item/d5ef8b2365bb7e98b7326346

SWAYWOOD 发表于 2014-3-19 20:59:28

另外提供两种方法,.net程序中同步地调用command:
http://www.cnblogs.com/swtool/p/SWTOOL_00012.html

guohq 发表于 2014-3-25 15:30:22

建议看一下 http://bbs.mjtd.com/thread-109357-1-1.html   , 这样可以同步调用。
页: [1]
查看完整版本: 如何用C#调用lisp程序命令啊