找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1288|回复: 15

[求助] [求助]:调用共用LSP程序的问题

[复制链接]
发表于 2005-4-26 23:50:08 | 显示全部楼层 |阅读模式

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

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

×
我有很多LSP程序中需要调用一个共用程序,如果把共用的代码加入到每个程序中有点麻烦,,有没有好的办法可以让每个程序调用共用程序并返回?

;;;N多程序中
(defun c:TEST()
  (setvar "cmdecho"0)
  (testone)
(prin1)
)

(defun c:bbb()                  ;;;而其他程序中可能为(defun c:ccc()
......
)

;;;;共用程序
(defun testone (/ a)
(setq a (getreal) "输入实数:")   
  (if (= a 123456)
  (c:bbb)                                      ;;;而其他程序中可能为(defun c:ccc()
    (t (alert "出错!!!"))
  )
(prin1)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-27 09:24:53 | 显示全部楼层
完全可以,各种API就是这样的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-27 09:31:20 | 显示全部楼层
但我现在就是有一个地方不太明白

;;;LSP程序1
(defun c:TEST1()
(setvar "cmdecho"0)
(testone)
(prin1)
)

(defun c:bbb() ......
)


;;;LSP程序2
(defun c:TEST2()
(setvar "cmdecho"0)
(testone)
(prin1)
)

(defun c:ccc()
......
)

;;;LSP程序3
(defun c:TEST3()
(setvar "cmdecho"0)
(testone)
(prin1)
)

(defun c:fff()
......
)



;;;;共用程序
(defun testone (/ a)
(setq a (getreal) "输入实数:")
(if (= a 123456)
(c:bbb) ;;;而其他程序中可能为(defun c:ccc()  在这句中,因为每个程序的函数不同,应该怎么处理?  比如有的应该返回到(c:fff),应该如何处理比较好呢?
(t (alert "出错!!!"))
)
(prin1)
)

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

使用道具 举报

发表于 2005-4-27 13:14:28 | 显示全部楼层
1、编程时,你的思路一定要清晰,否则,无法让计算机帮你干活。
2、公用程序可以带上参数:
   (defun testone (funn / a)
           ...............
          )
       在TEST1中用(TESTONE  “BBB”),在TEST2中用(TESTONE  “CCC”),在TEST3中用(TESTONE  “FFF”)
3  子程序也是程序,与是否为单独的文件无关,只是你要保证公用程序必须加载,你可以在调用之前先测试一下,比如在TEST1中加入下面的语句:
(if (not testone)
    (if (load "公用程序文件名")
        (testone "bbb")
        (progn
           (princ "\n没有找到公用程序。")
           (exit)
         )
        )
        (testone "bbb")
   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

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

使用道具 举报

 楼主| 发表于 2005-4-27 23:39:28 | 显示全部楼层
;;;LSP程序1
(defun c:TEST1()
(setvar "cmdecho"0)
(testone)
(if (not testone)
(if (load "testone.lsp")
(testone "bbb")
(progn
(princ "\n没有找到公用程序。")
(exit)
)
)
(testone "bbb")
)
(prin1)
)

(defun c:bbb()
......
)



(defun testone (funn / a)
(setq a (getreal) "输入实数:")
(if (= a 123456)
(c:bbb)                                  ;;;那这一行该怎么写?[/COLOR]
(t (alert "出错!!!"))
)
(prin1)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-28 00:19:08 | 显示全部楼层

  1. (cond
  2.   ((= func 1) (c:bbb))
  3.   ((= func 2) (c:dddd))
  4.   (r (alert “error"))
  5. )
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-28 07:51:11 | 显示全部楼层
最初由 kevinchan 发布
[B];;;LSP程序1
(defun c:TEST1()
(setvar "cmdecho"0)
(testone)
(if (not testone)
(if (load "testone.lsp")
(testone "bbb")
(progn
(princ "\n没有找到公用程序。")
(exit)
)
)
(testone "bbb")
) ... [/B]




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

使用道具 举报

 楼主| 发表于 2005-4-28 08:06:37 | 显示全部楼层
是这样的吗?

(defun c:TEST1()
(setvar "cmdecho"0)
(if (not testone)
(if (load "testone.lsp")
(testone "bbb")
(progn
(princ "\n没有找到公用程序。")
(exit)
)
)
(testone "bbb")
)
(prin1)
)

(defun c:bbb()
      (command "circle" (list 2 2) 2)
)

;;;公用
(defun testone (funn / a)
(cond
  ((= funn bbb) (c:bbb))
  ((= funn dddd) (c:dddd))
  (r (alert "error"))
)
(setq a (getreal "输入实数:"))
(if (= a 123456)
((eval (read (strcat "c:" funn))))
(t (alert "搞错了!"))
)
(prin1)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-28 12:13:32 | 显示全部楼层
觉得你的程序结构有问题,公用函数这么用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-28 12:51:24 | 显示全部楼层
最初由 eachy 发布
[B]觉得你的程序结构有问题,公用函数这么用? [/B]


我的意图是所有程序要根据公用程序判断的结果来运行......
比如我可以把a的值改成 (dos_serialno)来判断,以后需要修改的话我直接改公用程序就好了,我是希望这样能方便些...
eachy有没有什么好的办法?

还有一个奇怪的问题是,我把testone.lsp编译成vlx,居然就 不能(load "testone.vlx)了

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-4-28 23:06:25 | 显示全部楼层
看一下load的帮助.
不要加后缀,会自动找的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-28 23:13:03 | 显示全部楼层
谢谢两位斑竹大哥,我试了几次,老是要重复在命令栏运行两次(test1)才可以,不知道什么问题..
只有把test1.lsp的判断语句去掉了,才正常..
(defun c:TEST1()
(setvar "cmdecho"0)
(load "testone.vlx")
(testone "bbb")
(prin1)
)

(defun c:bbb()
(command "circle" (list 2 2) 2)
)

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-4-28 23:13:13 | 显示全部楼层
看了一下:是因为程序都写好了,最后想加密,是吧?

  1. (defun testone (a / )
  2. (cond
  3. (( = 1 a) t)
  4. ...
  5. ((= 0 a) nil)
  6. )
  7. ===========================
  8. (if (testone a)
  9.   (progn (defun ......)
  10.             (defun ....)
  11.   )
  12. )
  13. 检测不通过,那么,所有的函数将不定义
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 03:51 , Processed in 0.325779 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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