明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1338|回复: 14

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

[复制链接]
发表于 2019-10-22 13:16 | 显示全部楼层 |阅读模式
想写一个供lisp读取粘贴板的函数 ,提示错误ads请求,请帮忙看看原因

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

                }
                else
                    rtnstring = Clipboard.GetText();

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

发表于 2019-10-22 14:35 | 显示全部楼层
[LispFunction("readcb")]
        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;
        }
发表于 2019-10-23 11:09 | 显示全部楼层
brainstorm 发表于 2019-10-23 10:33
我是刚学. net,现阶段主要是想写一写函数供lisp 调用,以后想慢慢转向 .net

速度的话,C#比lisp要快的多,分别用两种语言写过相同功能的函数,从时间上看应该只用了1/10的时间(个人估算,不同情况下应该不同);不过涉及到lispfunction的时候,很容易出问题,数据类型、精度等等都需要注意,多数时候只能自己一点点调试
发表于 2019-10-22 23:42 | 显示全部楼层
@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[0])
发表于 2019-10-22 14:06 | 显示全部楼层
如果是读取剪贴板内容供lisp调用的话,感觉这逻辑反了
 楼主| 发表于 2019-10-22 15:14 来自手机 | 显示全部楼层
谢谢回复,我是想当rb 为空时读取,如果有值写入粘贴板,可是在写入的时候有错误,不知道什么原因,帮忙看看
 楼主| 发表于 2019-10-22 15:15 来自手机 | 显示全部楼层
Clipboard.SetText(rtnstring);这个有问题,但是可以写入粘贴板
发表于 2019-10-22 16:18 | 显示全部楼层
试试下面的写法,不确定是否可行
Clipboard.SetDataObject(rtnstring);
 楼主| 发表于 2019-10-22 16:57 | 显示全部楼层
satan421 发表于 2019-10-22 16:18
试试下面的写法,不确定是否可行
Clipboard.SetDataObject(rtnstring);

这样写可以了 非常感谢
 楼主| 发表于 2019-10-22 17:36 | 显示全部楼层
奇怪了,在lisp里面只可以单次执行
这样就会出错
(repeat 10 (MM_clipboard "1235"))找不到问题的原因,请指导一下
发表于 2019-10-23 10:07 | 显示全部楼层
brainstorm 发表于 2019-10-22 17:36
奇怪了,在lisp里面只可以单次执行
这样就会出错
(repeat 10 (MM_clipboard "1235"))找不到问题的原因, ...

报的错是什么,还是错误ads请求吗?还有就是不确定你这样循环的目的是什么,传一个表到C#里面再循环可行吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 02:10 , Processed in 0.194389 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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