乐筑天下

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

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

[复制链接]

23

主题

85

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
176
发表于 2019-10-22 13:16:00 | 显示全部楼层 |阅读模式
想写一个供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..Runtime.Exception ex)
            { return null; }
            return rtnstring;
        }
回复

使用道具 举报

2

主题

157

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2019-10-22 14:35:00 | 显示全部楼层
[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;
        }
回复

使用道具 举报

2

主题

157

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2019-10-23 11:09:00 | 显示全部楼层

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

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2019-10-22 23:42:00 | 显示全部楼层
@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])
回复

使用道具 举报

2

主题

157

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2019-10-22 14:06:00 | 显示全部楼层
如果是读取剪贴板内容供lisp调用的话,感觉这逻辑反了
回复

使用道具 举报

23

主题

85

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
176
发表于 2019-10-22 15:14:00 | 显示全部楼层
谢谢回复,我是想当rb 为空时读取,如果有值写入粘贴板,可是在写入的时候有错误,不知道什么原因,帮忙看看
回复

使用道具 举报

23

主题

85

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
176
发表于 2019-10-22 15:15:00 | 显示全部楼层
Clipboard.SetText(rtnstring);这个有问题,但是可以写入粘贴板
回复

使用道具 举报

2

主题

157

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2019-10-22 16:18:00 | 显示全部楼层
试试下面的写法,不确定是否可行
Clipboard.SetDataObject(rtnstring);
回复

使用道具 举报

23

主题

85

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
176
发表于 2019-10-22 16:57:00 | 显示全部楼层

这样写可以了 非常感谢
回复

使用道具 举报

23

主题

85

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
176
发表于 2019-10-22 17:36:00 | 显示全部楼层
奇怪了,在lisp里面只可以单次执行
这样就会出错
(repeat 10 (MM_clipboard "1235"))找不到问题的原因,请指导一下
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 02:16 , Processed in 0.723800 second(s), 72 queries .

© 2020-2025 乐筑天下

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