明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2141|回复: 9

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

  [复制链接]
发表于 2021-2-1 18:33:59 | 显示全部楼层 |阅读模式
本帖最后由 print1985 于 2021-2-1 23:38 编辑

复制代码
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Runtime;

  5. namespace ClassLibrary1
  6. {
  7.     public class Class1
  8.     {
  9.         [CommandMethod("Test1", CommandFlags.Session)]
  10.         static public void Test1()
  11.         {
  12.             ResultBuffer pa = new ResultBuffer(); //lisp参数
  13.             ResultBuffer rb = new ResultBuffer(); //lisp返回值
  14.             pa.Add(new TypedValue((int)LispDataType.Text, "c:lisp1")); //lisp函数名字
  15.             pa.Add(new TypedValue((int)LispDataType.Double, 123));  //lisp参数1 Double类型也可直接用5001代码
  16.             //pa.Add(new TypedValue(5001, 123)); //也可直接用5001代码
  17.             rb = Application.Invoke(pa); //调用lisp函数,并取得返回值
  18.             if (rb != null)
  19.             {
  20.                 Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  21.                 TypedValue[] Array = rb.AsArray(); //返回值为数组
  22.                 string str = Array[0].Value.ToString();
  23.                 ed.WriteMessage("lisp返回值为:" + str);
  24.             }

  25.             //lisp参数类型及代码
  26.             //None = 5000,
  27.             //Double = 5001,
  28.             //Point2d = 5002,
  29.             //Int16 = 5003,
  30.             //Angle = 5004,
  31.             //Text = 5005,
  32.             //ObjectId = 5006,
  33.             //SelectionSet = 5007,
  34.             //Orientation = 5008,
  35.             //Point3d = 5009,
  36.             //Int32 = 5010,
  37.             //Void = 5014,
  38.             //ListBegin = 5016,
  39.             //ListEnd = 5017,
  40.             //DottedPair = 5018,
  41.             //Nil = 5019,
  42.             //T_atom = 5021
  43.         }
  44.     }
  45. }




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

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






"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-2-2 10:18:07 | 显示全部楼层
谢谢分享,兄弟,这种方法和AUTOCAD版本是否有关?
 楼主| 发表于 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#的源码明经和晓东有很多。
发表于 2021-2-2 15:39:49 | 显示全部楼层
这个必须关注 感觉打开了新的大门
发表于 2021-2-18 11:00:13 | 显示全部楼层
感谢分享,最近开始学习新的知识了!
发表于 2021-3-12 11:23:35 | 显示全部楼层
好东西,必须留存备用!!!
发表于 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
发表于 2023-2-6 14:47:02 | 显示全部楼层
先收藏,再研究
发表于 2023-12-17 22:25:11 | 显示全部楼层
好东西,必须收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 19:56 , Processed in 0.204717 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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