明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1337|回复: 5

vb.net调用lisp文件

[复制链接]
发表于 2014-7-11 15:53:34 | 显示全部楼层 |阅读模式
请大神给段代码
发表于 2014-7-11 17:53:45 | 显示全部楼层
C#的版本

        [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl)]
        extern static private int acedInvoke(IntPtr args, out IntPtr result);
        public static ResultBuffer CallLispFunction(ResultBuffer args)
        {
            IntPtr ip = IntPtr.Zero;
            int st = acedInvoke(args.UnmanagedObject, out ip);
            if (ip != IntPtr.Zero)
            {
                ResultBuffer rbRes = ResultBuffer.Create(ip, true);
                return rbRes;
            }
            return null;
        }
        public static ResultBuffer CallLispFunction(string name, params object[] args)
        {
            ResultBuffer rbArgs = new ResultBuffer();
            rbArgs.Add(new TypedValue((int)LispDataType.Text, name));
            foreach (object val in args)
            {
                AddValueToResultBuffer(ref rbArgs, val);
            }
            return CallLispFunction(rbArgs);
        }
发表于 2014-7-11 17:54:44 | 显示全部楼层
        private static void AddValueToResultBuffer(ref ResultBuffer rb, object obj)
        {
            if (obj == null)
            {
                rb.Add(new TypedValue((int)LispDataType.Text, ""));
            }
            else
            {
                if (obj is string)
                {
                    rb.Add(new TypedValue((int)LispDataType.Text, obj));
                }
                else if (obj is Point2d)
                {
                    rb.Add(new TypedValue((int)LispDataType.Text, "_non"));
                    rb.Add(new TypedValue((int)LispDataType.Point2d, obj));
                }
                else if (obj is Point3d)
                {
                    rb.Add(new TypedValue((int)LispDataType.Text, "_non"));
                    rb.Add(new TypedValue((int)LispDataType.Point3d, obj));
                }
                else if (obj is ObjectId)
                {
                    rb.Add(new TypedValue((int)LispDataType.ObjectId, obj));
                }
                else if (obj is SelectionSet)
                {
                    rb.Add(new TypedValue((int)LispDataType.SelectionSet, obj));
                }
                else if (obj is double)
                {
                    rb.Add(new TypedValue((int)LispDataType.Double, obj));
                }
                else if (obj is short)
                {
                    rb.Add(new TypedValue((int)LispDataType.Int16, obj));
                }
                else if (obj is int)
                {
                    rb.Add(new TypedValue((int)LispDataType.Int32, obj));
                }
                else if (obj is TypedValue)
                {
                    rb.Add(obj);
                }

            }
        }
 楼主| 发表于 2014-7-12 15:09:11 | 显示全部楼层
雪山飞狐_lzh 发表于 2014-7-11 17:54
private static void AddValueToResultBuffer(ref ResultBuffer rb, object obj)
        {
     ...

要在VB.NET中写一段可以调用lisp程序的代码。能否给个VB代码。
发表于 2014-7-12 19:12:15 | 显示全部楼层
自己转换一下吧 呵呵
VB.NET--->C#

地址(C#---> VB.NET):

http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx


地址( VB.NET--->C#):

http://www.developerfusion.co.uk/utilities/convertvbtocsharp.aspx
 楼主| 发表于 2014-7-17 10:50:34 | 显示全部楼层
雪山飞狐_lzh 发表于 2014-7-12 19:12
自己转换一下吧 呵呵
VB.NET--->C#

谢谢大神的帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:50 , Processed in 0.180529 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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