革天明
发表于 2015-10-9 14:16:16
大家好,如何使用lisp调用.net的命令(带参数)呢?
比如说.net中定义fuc1(int a,int b),函数返回值为c=a+b,
这样一个函数如何在autocad 2006中调用呢,LispDataType显示不存在此命名空间或类型
革天明
发表于 2015-12-18 17:50:30
雪山飞狐_lzh 发表于 2010-4-17 16:14 static/image/common/back.gif
1、声明lsp函数
(defun c:lsptest1() 2)
注意,最好以命令方式声明即C:XXX
LispDataType
此处显示未知
brainstorm
发表于 2019-10-18 10:54:14
提示无法找到名为acedinvoke 的入口点
brainstorm
发表于 2019-10-19 10:19:36
本帖最后由 brainstorm 于 2019-10-19 10:23 编辑
autocad 2011以后版本用Application.Invoke(),这样就可以用lisp函数vlax-ldata取得图元的ldata了
Lisp
(vl-acad-defun 'lsptest1)
(defun lsptest1 (str)
(list str "this is a test" "open the door" "sucess!" )
)
C#
public static void Test()
{
var db = HostApplicationServices.WorkingDatabase;
var doc = Application.DocumentManager.GetDocument(db);
var ed = doc.Editor;
//ResultBuffer rb = new ResultBuffer();
ResultBuffer rb1 = new ResultBuffer
{
new TypedValue((int)LispDataType.Text, "lsptest1"),
new TypedValue((int)LispDataType.Text, "this is a test too")
};
try
{
//var rb = InvokeArx.CallLispFunction(rb1);
var rb = Application.Invoke(rb1);
ed.WriteMessage("\n now is exporting what u need:" + rb.ToString());
}
catch(Autodesk.AutoCAD.Runtime.Exception ex)
{
ed.WriteMessage(ex.Message);
}
}
qq1254582201
发表于 2021-8-13 16:44:49
好东西,收藏六爪
guohq
发表于 2021-8-20 14:06:37
本帖最后由 guohq 于 2021-8-21 00:41 编辑
提前定义此函数
(defun c:GetVariableValue(VarName)
(eval (read VarName))
)
就可以通过下面语句来获取Lisp变量的值了
Application.Invoke(New ResultBuffer(New TypedValue(LispDataType.Text, "c:GetVariableValue"), New TypedValue(LispDataType.Text, Ed.GetString("变量名").StringResult)))
感兴趣的可以试试:lol
SWAYWOOD
发表于 2021-9-20 22:56:51
在c#代码里面try一下应该可以判断
htxhtx
发表于 2022-6-4 19:02:09
c# 调用lisp程序,好带吗