print1985 发表于 2021-2-1 18:33:59

lisp+c#混合编程之--C#调用lisp函数(源码)

本帖最后由 print1985 于 2021-2-1 23:38 编辑


using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

namespace ClassLibrary1
{
    public class Class1
    {
      
      static public void Test1()
      {
            ResultBuffer pa = new ResultBuffer(); //lisp参数
            ResultBuffer rb = new ResultBuffer(); //lisp返回值
            pa.Add(new TypedValue((int)LispDataType.Text, "c:lisp1")); //lisp函数名字
            pa.Add(new TypedValue((int)LispDataType.Double, 123));//lisp参数1 Double类型也可直接用5001代码
            //pa.Add(new TypedValue(5001, 123)); //也可直接用5001代码
            rb = Application.Invoke(pa); //调用lisp函数,并取得返回值
            if (rb != null)
            {
                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
                TypedValue[] Array = rb.AsArray(); //返回值为数组
                string str = Array.Value.ToString();
                ed.WriteMessage("lisp返回值为:" + str);
            }

            //lisp参数类型及代码
            //None = 5000,
            //Double = 5001,
            //Point2d = 5002,
            //Int16 = 5003,
            //Angle = 5004,
            //Text = 5005,
            //ObjectId = 5006,
            //SelectionSet = 5007,
            //Orientation = 5008,
            //Point3d = 5009,
            //Int32 = 5010,
            //Void = 5014,
            //ListBegin = 5016,
            //ListEnd = 5017,
            //DottedPair = 5018,
            //Nil = 5019,
            //T_atom = 5021
      }
    }
}




lisp源码:(defun c:lisp1(a) (princ (strcat "C#传入lisp参数为:" (rtos a) "\n")) 456)

关于C#调用lisp的源码好像较少,我弄了个超简单的,给需要的朋友






yshf 发表于 2021-2-1 23:51:12

谢谢分享

x_s_s_1 发表于 2021-2-2 10:18:07

谢谢分享,兄弟,这种方法和AUTOCAD版本是否有关?

print1985 发表于 2021-2-2 11:21:33

x_s_s_1 发表于 2021-2-2 10:18
谢谢分享,兄弟,这种方法和AUTOCAD版本是否有关?

好像是从CAD2012左右的版本才开始有这个函数
即使老版本其实也可以用另外的办法解决的,只是多一道程序而已:
比如C#调用lisp用SendStringToExecute(可以带参数),但是无法获得lisp返回值,那么就增加一道程序,用lisp调用另外一个C#子程序,把lisp得到的值返回给C#,这样就实现了Invoke的功能。
关于lisp调用C#的源码明经和晓东有很多。

nijiea123 发表于 2021-2-2 15:39:49

这个必须关注 感觉打开了新的大门

cqu20104225 发表于 2021-2-18 11:00:13

感谢分享,最近开始学习新的知识了!

qq1254582201 发表于 2021-3-12 11:23:35

好东西,必须留存备用!!!

434939575 发表于 2023-2-5 22:43:20

新人请问using Autodesk.<a href="http://bbs.mjtd.com/forum-41-1.html" target="_blank" class = "relatedlink">AutoCAD</a>.ApplicationServices;这句错误        4        应输入标识符       

CAD2015 VS2013

zxfddz 发表于 2023-2-6 14:47:02

先收藏,再研究

jia_jg 发表于 2023-12-17 22:25:11

好东西,必须收藏
页: [1]
查看完整版本: lisp+c#混合编程之--C#调用lisp函数(源码)