革天明 发表于 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程序,好带吗
页: 1 2 [3]
查看完整版本: C#能调用autolisp的程序么?