brainstorm 发表于 2019-10-22 13:16:13

C#lisp函数读取粘贴板,提示错误,如何解决

想写一个供lisp读取粘贴板的函数 ,提示错误ads请求,请帮忙看看原因


      public string lsp_clipboard(ResultBuffer rb)
      {
            string rtnstring = "";
            try
            {
                if (rb != null)
                {
                  TypedValue[] TB = rb.AsArray();
                  if (TB.TypeCode == (int)LispDataType.Text)
                  {
                        rtnstring = TB.Value as string;
                        Clipboard.SetText(rtnstring);
                  }

                }
                else
                  rtnstring = Clipboard.GetText();

            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            { return null; }
            return rtnstring;
      }

satan421 发表于 2019-10-22 14:35:45


      public static object readcb(ResultBuffer rb)
      {
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            string str = Clipboard.GetText();
            TypedValue ty = new TypedValue();
            if (str != null)
            {
                ty = new TypedValue((int)LispDataType.Text, str);
            }
            else
            {
                ty = new TypedValue((int)LispDataType.Nil);
            }
            return ty;
      }

satan421 发表于 2019-10-23 11:09:20

brainstorm 发表于 2019-10-23 10:33
我是刚学. net,现阶段主要是想写一写函数供lisp 调用,以后想慢慢转向 .net

速度的话,C#比lisp要快的多,分别用两种语言写过相同功能的函数,从时间上看应该只用了1/10的时间(个人估算,不同情况下应该不同);不过涉及到lispfunction的时候,很容易出问题,数据类型、精度等等都需要注意,多数时候只能自己一点点调试

雪山飞狐_lzh 发表于 2019-10-22 23:42:06

@lisp()
def clipboard(doc, args):
    from System.Windows.Forms import Clipboard
    count = len(args)
    if count == 0:
      return Clipboard.GetText()
    elif count == 1:
      Clipboard.SetText(args)

satan421 发表于 2019-10-22 14:06:25

如果是读取剪贴板内容供lisp调用的话,感觉这逻辑反了

brainstorm 发表于 2019-10-22 15:14:47

谢谢回复,我是想当rb 为空时读取,如果有值写入粘贴板,可是在写入的时候有错误,不知道什么原因,帮忙看看

brainstorm 发表于 2019-10-22 15:15:38

Clipboard.SetText(rtnstring);这个有问题,但是可以写入粘贴板

satan421 发表于 2019-10-22 16:18:37

试试下面的写法,不确定是否可行
Clipboard.SetDataObject(rtnstring);

brainstorm 发表于 2019-10-22 16:57:58

satan421 发表于 2019-10-22 16:18
试试下面的写法,不确定是否可行
Clipboard.SetDataObject(rtnstring);

这样写可以了 非常感谢

brainstorm 发表于 2019-10-22 17:36:03

奇怪了,在lisp里面只可以单次执行
这样就会出错
(repeat 10 (MM_clipboard "1235"))找不到问题的原因,请指导一下

satan421 发表于 2019-10-23 10:07:37

brainstorm 发表于 2019-10-22 17:36
奇怪了,在lisp里面只可以单次执行
这样就会出错
(repeat 10 (MM_clipboard "1235"))找不到问题的原因, ...

报的错是什么,还是错误ads请求吗?还有就是不确定你这样循环的目的是什么,传一个表到C#里面再循环可行吗
页: [1] 2
查看完整版本: C#lisp函数读取粘贴板,提示错误,如何解决