明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1482|回复: 6

求助:关于函数调用问题

  [复制链接]
发表于 2009-9-2 23:33:00 | 显示全部楼层 |阅读模式

求助:

 如何在一个具有“独立变量空间”的程序中调用另一个具有“独立变量空间”的程序中所定义的c:函数?

例如:aa和 bb两个lisp程序要分别被编译成“独立变量空间”的vlx程序。

         如何实现在aa程序中调用bb程序中定义的C:函数呢? 

发表于 2009-9-3 08:01:00 | 显示全部楼层

使函數讓目前的文件可用
(vl-doc-export 'function)

當在自已名稱空間執行的 VLX 從自已發出時,vl-doc-export 出現特定的函數在任何載入 VLX 的文件名稱空間。
vl-doc-export 函數應只用在檔案的頂層,決不在其他格式中。(例如,不在 defun 中)。

引數

'function

要匯出函數名稱的符號。

傳回值

未指定。

範例

下列的程式碼顯示名為 kertrats.lsp 檔案的內容。這個檔案編譯到在自己名稱空間中執行的 VLX 中。
這個 VLX 檔案名稱為 kertrats.vlx。vl-doc-export 呼叫使 kertrats函數可見於任何載入 kertrats.vlx:

(vl-doc-export 'kertrats)
(defun kertrats ()
  (princ "This function goes nowhere")

)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


將之前匯出的函數匯入到 VLX 名稱空間
(vl-doc-import application ['function...])

這個函數可以用在分離名稱空間的 VLX 中,來匯入之前從相同文件載入的另一個 VLX 匯出的函數。
vl-doc-import 函數應只用在檔案的頂層,決不在其他格式中。(例如,不在 defun 中)。

引數

application

其函數要被匯入之 VLX 應用程式名稱的字串請不要在名稱中包含 .vlx 副檔名。

函數

一個或以上要匯入函數名稱的符號。如果沒有指定的函數,會匯入全部由 application 匯出的函數。

傳回值

未指定。

範例

從 ldatatest 應用程式匯入 ldataget 函數:

(vl-doc-import "ldatatest" 'ldataget)

nil

 楼主| 发表于 2009-9-3 16:09:00 | 显示全部楼层

非常感谢版主龙龙仔的快速回复,再多请教两个个问题

一、 vl-doc-import和vl-doc-export是不是一定成对使用?

比如说:我想在程序aa中调用程序bb定义的函数, 是不是要在程序bb的开头使用vl-doc-export作发出声明;并且在程序aa的开头用vl-doc-import作引用声明呢?

二、上面两个程序编译成vlx文件后,进行加载是否有顺序规定。是一定先加载bb再加载aa吗?

发表于 2009-9-4 06:04:00 | 显示全部楼层
本帖最后由 作者 于 2009-9-4 8:31:49 编辑

下面是我收藏已经被关了禁闭的liminnet发的一个自这定义函数,看不明白怎么调用

(ko->entsel msg keyword action filter_list errmsg) 这个自定义函数,把它放在哪呢?

(ko->entsel msg keyword action filter_list errmsg) 这个自定义函数,把它放在哪呢?

我是自学时间也不长,龙版主的说明也没看明白,请教一下这个函数的加载(放在哪?)和调用方法,谢谢!

增强型及变种型ko->entsel

语法:

(ko->entsel msg keyword action filter_list errmsg)

功能及参数

功能:扩展 entsel,支持过滤选择,关键字,返回一个对象图元或字符串(包括关键字或实数或整数)或用空格结束返回nil
      可控制关键字是否需要空格或回车键或右键来响应程序
   
 
参数 [类型]:

msg         = 提示信息。如果nil时则显示缺省为"\n选择对象: "
keyword     = initget的keyword 关键字[STR]   不考虑时参数为nil   关键字必须大写和单词间至少留一位空格 "W G"或"Undo Option eXit"
action      = 控制keword是否需要空格或回车键或右键来响应,具备天正的命令的功能 T或nil(大小写不分)[SYM]
filter_list = 过滤字符表.参见ssget [LIST],不考虑时参数为nil     '((0 . "*LINE,CIRCLE,ARC"))或(list '(0 . "*line,circle,arc")) (大小写不分)
errmsg      = 出错信息(STR)。如果nil时则显示缺省为"无效的对象。"

对象
             注意:firstss参数如果要启用时,语句(setq firstss (cadr (ssgetfirst)))一定要放在主程序最前面一行
范例:

1.(ko->entsel "\n选择直线或圆/Undo/Option/eXit"  "Undo Option eXit" t '((0 . "*LINE,CIRCLE,ARC")) nil)

2.

测试:

(defun c:tt()
  (setq xh t)
  (while xh
    (setq ent (ko->entsel "\n测试ko->entsel函数(X)/(H):" "X H" T '((0 . "*LINE,CIRCLE,ARC")) nil))
    (cond ((= ent "X") (alert "等于字符串X你要执行的程序一") ent)
          ((= ent "H") (alert "等于字符串H你要执行的程序二") ent)
          ((= (type ent) 'ENAME) (alert "这个功能是返回图元名") (setq xh nil) ent)
          ((numberp ent) (alert (strcat "此项功能是判断输入的是否是实数或整理,
                                       用于不用进入子选项而直接设置一个值" "\n"
                                       "请选择要拉伸的对象或[当前默认值(500)或直接输入值回车改变默认值]"))
            ent
          )
          ((= ent nil) (setq xh nil))
    )
 )
)

(defun c:ff()
    (ko->entsel "\n[选择你要标注的对象或修改(F)/(W)/(X)]<" "Fdf  dWg    eXit" t (list '(0 . "*LINE,CIRCLE,ARC")) nil)
)

 

 

 

 

本帖子中包含更多资源

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

x
发表于 2009-9-4 07:58:00 | 显示全部楼层
zdzdzdzd发表于2009-9-3 16:09:00非常感谢版主龙龙仔的快速回复,再多请教两个个问题一、 vl-doc-import和vl-doc-export是不是一定成对使用?比如说:我想在程序aa中调用程序bb定义的函数, 是不是要在程序bb的开头使用vl-

可以這樣說vl-doc- export是把函數放在能調用的空間,vl-doc-import把可用的函數調進獨立變量空間

加載順序如你說的較好(只要在使用aa前bb有加載即可)

 楼主| 发表于 2009-9-4 22:42:00 | 显示全部楼层
龙龙仔发表于2009-9-4 7:58:00可以這樣說vl-doc- export是把函數放在能調用的空間,vl-doc-import把可用的函數調進獨立變量空間加載順序如你說的較好(只要在使用aa前bb有加載即可)

 在你的帮助下,问题已经解决,程序得到改善。

经过实测,加载顺序确实有要求。必须先加载bb。

再次感谢龙版主的热心答复。

发表于 2009-9-5 06:23:00 | 显示全部楼层

会的指点一下,我为你献花一朵表示谢意!

谁能告诉我怎么能用上liminnet发的一个自定义函数(四楼有程序下载)

我在文件中先加载了那个自定义函数,然后运行他给的测试程序就是不行呀,提示是没有定义……

(defun c:ff()
    (ko->entsel "\n[选择你要标注的对象或修改(F)/(W)/(X)]<" "Fdf  dWg    eXit" t (list '(0 . "*LINE,CIRCLE,ARC")) nil)
)

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 09:56 , Processed in 0.156533 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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