乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 82|回复: 6

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

[复制链接]

4

主题

4

帖子

1

银币

初来乍到

Rank: 1

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

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2013-11-1 19:10:00 | 显示全部楼层
///
    /// 调用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);
    ///
    /// 输入链表,表头应该是Lisp函数名,后面是Lisp函数实参
    /// Lisp函数返回状态,成功返回RTNORM(5100),失败返回NULL(0)
    /// Lisp函数的返回值
    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;
      }
    }
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2013-11-1 19:11:00 | 显示全部楼层
[System.Security.SuppressUnmanagedCodeSecurity]
    [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl)]
    extern static public  int acedInvoke(IntPtr args, out IntPtr result);
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2013-11-1 19:15:00 | 显示全部楼层
至于ObjectARX.Net对Lisp装载,我也没搞过,也没搞明白
我碰到过一个这样的问题,即在dll初始化过程即Initialize()函数里面无法调用Lisp函数,即使过程显示Lisp文件已经装载.Initialize()执行完之后,命令开始前可以调用Lisp函数
回复

使用道具 举报

89

主题

410

帖子

8

银币

中流砥柱

Rank: 25

铜币
766
发表于 2014-3-5 21:28:00 | 显示全部楼层
回复

使用道具 举报

89

主题

410

帖子

8

银币

中流砥柱

Rank: 25

铜币
766
发表于 2014-3-19 20:59:00 | 显示全部楼层
另外提供两种方法,.net程序中同步地调用command:
http://www.cnblogs.com/swtool/p/SWTOOL_00012.html
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2014-3-25 15:30:00 | 显示全部楼层
建议看一下    , 这样可以同步调用。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:16 , Processed in 0.632583 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表