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的源码好像较少,我弄了个超简单的,给需要的朋友
谢谢分享 谢谢分享,兄弟,这种方法和AUTOCAD版本是否有关? x_s_s_1 发表于 2021-2-2 10:18
谢谢分享,兄弟,这种方法和AUTOCAD版本是否有关?
好像是从CAD2012左右的版本才开始有这个函数
即使老版本其实也可以用另外的办法解决的,只是多一道程序而已:
比如C#调用lisp用SendStringToExecute(可以带参数),但是无法获得lisp返回值,那么就增加一道程序,用lisp调用另外一个C#子程序,把lisp得到的值返回给C#,这样就实现了Invoke的功能。
关于lisp调用C#的源码明经和晓东有很多。 这个必须关注 感觉打开了新的大门 感谢分享,最近开始学习新的知识了! 好东西,必须留存备用!!! 新人请问using Autodesk.<a href="http://bbs.mjtd.com/forum-41-1.html" target="_blank" class = "relatedlink">AutoCAD</a>.ApplicationServices;这句错误 4 应输入标识符
CAD2015 VS2013 先收藏,再研究 好东西,必须收藏
页:
[1]