找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2013|回复: 16

[VBA程序]:秋枫,帮我看看,关于在vba中对lisp求值的问题

[复制链接]
发表于 2003-1-10 12:20:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
秋枫,按你说的字符串用双引号
Set vl_hello = vl_read.funcall("(defun hello (x) (strcat ""good morning, "" x)) ")
可以运行,但我改成这样就不行了,为什么? 你帮我看看,好吗?

Set vl_hello = vl_read.funcall("(defun hello (x)  (load  ""a.lsp"")) ")

运行后a.lsp能被调用,但会出现如图示的提示。内容是 run-time error "13"  .  Type mismatch  .   相当于类型错误。

这是所有的代码
Sub Hello()
    Set vla = CreateObject("VL.Application.1")
    Set vld = vla.ActiveDocument
    Set vl_read = vld.Functions.Item("read")
    Set vl_eval = vld.Functions.Item("eval")
Set vl_hello = vl_read.funcall("(defun hello (x)  (load  ""a.lsp"")) ")
Set vl_hello = vl_eval.funcall(vl_hello)
    Set vl_hello = vld.Functions.Item("hello")
    ret = vl_hello.funcall("world")
    MsgBox ret, vbOKOnly
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-1-10 12:58:33 | 显示全部楼层
可能是两个函数的不同区别吧。

  1.   [FONT=courier new]
  2. read
  3. 返回字符串中的第一个表或第一个原子
  4. eval
  5. 返回 AutoLISP 表达式的求值结果
  6.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-10 13:06:24 | 显示全部楼层
可能是因为你的这个hello函数没有返回值。随便着个字符串返回值试试。我最近很忙,没有空作这方面的尝试
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-10 13:16:51 | 显示全部楼层
efan2000 对这个也有研究啊。

可能和 ret = vl_hello.funcall("world") 中的 ret 类型有关, 我把ret=删掉就好了,

秋枫说得对,确实是没有返回值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-10 16:23:18 | 显示全部楼层
efan  你有没有介绍 关于VLisp对象的比较系统的资料?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-1-10 16:31:35 | 显示全部楼层
看帮助文件吧,里面介绍的非常详细,最好是ACAD2000简体中文版中的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-12 16:27:05 | 显示全部楼层
这种方式是不是不支持command 函数?
我把 (load  ""a.lsp"") 改成 (command ""line"") 后或者调用的lsp程序内有command函数就会出现 如图示的提示," invalid autocad command: nil ",不知是怎么回事。因为lsp程序中用到command函数是不可少的事,应该怎么解决呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-1-12 16:47:40 | 显示全部楼层
最好不要调用Command函数,因而有的命令后要跟参数,这样会中止程序运行,如果调用的话,也要加上完整的参数。用VL应只完成比如一个函数或者过程的功能,其它的通过返回的值来处理。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 08:53:23 | 显示全部楼层
在VBA中用这种方式调用LSP,我也曾试过,似乎里面的限制挺多(主要指LSP),所以不敢轻易采用。我现在主要采用Sendcommand,让人看见一点提示也没有什么大不了的事。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-13 09:43:51 | 显示全部楼层
噢,看来是不能用这个了。
因为我的lisp程序里的command用得挺多,每个绘图命令都是用command来调用的。
没法没法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-13 10:16:09 | 显示全部楼层
我发现在acad2002中可以用中文作为函数名,如果用sendcommand命令发送“正在绘图,请稍候”这个函数名,那谁也不会把“正在绘图,请稍候”看成是一个函数的。

哈哈:7 :7
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-13 10:37:15 | 显示全部楼层
不过有时我用sendkeys或sendcommand发送字符时,比如“abcdefg”,在acad中接收到的字符顺序会乱,不是abcdefg,是其他的,像gabcdef之类的,这种现象偶尔会出现,没有规律,不知你们有没有遇到过。
怎么解决呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-13 11:49:20 | 显示全部楼层
如果用 Set vl_hello = vl_read.funcall("(defun hello (x) (load ""a.lsp"")) ") 方式调用的a.lsp文件里有 (defun c:qq() ...) 之类的带c:定义的语句,就会运行出错,如图示。acad的命令行会出现这种提示

Command: ; 错误: 出现异常: 0xC0000005 (访问冲突)
; 警告: 忽略展开 异常
; 错误: 出现异常: 0xC0000005 (访问冲突)
; 错误: 出现异常: 0xC0000005 (访问冲突)

把c:去掉就没问题了。 是怎么回事呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-13 13:58:20 | 显示全部楼层
最初由 god 发布
[B]如果用 Set vl_hello = vl_read.funcall("(defun hello (x) (load ""a.lsp"")) ") 方式调用的a.lsp文件里有 (defun c:qq() ...) 之类的带c:定义的语句,就会运行出错,如图示。acad的命令行会出现这种提示

Comman... [/B]


好家伙,连连发问。
*****************************
你的这些问题我都遇到过,但我都没有去解决它,因为我没有能力去解决它,而是采用迂回的办法避开它。
*****************************
不知你为什么要采用这种方式来调用LSP?是不是想用VBA作一个程序框架,里面显示程序功能的列表或按钮,然后通过点击这些列表或按钮来调用各个程序文件?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-13 14:06:19 | 显示全部楼层
基本上是吧,我的计算主程序使用VB编的,想在vb里调用用lisp语言编的绘图程序。
原来你都是老手了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 05:43 , Processed in 0.475402 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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