yxp 发表于 2004-11-19 20:56:00

关于LISP和DCL的合并问题的另一种解决办法

运行一个CAD程序需要两个文件,当然不是很方便,可以使用编译的方法,在R14下将LSP和DCL文件编译成ARX后成了怪物,文件增大了上百倍,而且与高版本的CAD不兼容,在2004下编译为VLX文件后,又不能在低版本的CAD下运行.



如果将DCL文件的源码由LSP写入,并保存在某个目录下,再由LSP调用,那么是否就可以合二为一了?有了这个思路,那么这个转换的过程完全可以由程序来办.


LISP的事还是靠LISP来完成吧,以下程序就是将DCL文件转换为我们想要的结果.


<BR>(defun c:dcl( / df_row df_roc )<BR>               (if (not df_row) (setq df_row "")) <BR>               (setq df_row (getfiled "打开DCL文件" df_row "dcl" 2)) <BR>               (if df_row (zhhuan) (princ       "\n 未选择DCL文件"))<BR>               (princ)<BR>)<BR>(defun zhhuan()<BR>       (setq df_roc (getfiled "保存dcl-LSP文件" df_row "lsp" 1))<BR>       (if df_roc (p_yx)(princ       "\n 未保存dcl-LSP文件") )<BR>)<BR>(defun p_yx()<BR>       (setq f_dat (open df_row "r"))<BR>       (setq f_wrt (open df_roc "w"))<BR>       (setq       bc_txt "" )<BR>       (write-line "(defun ydcl()" f_wrt)<BR>       (write-line (strcat "(setq f_dcl (open \"" (f_name df_row) "\" \"w\"))") f_wrt)<BR>       (while       (setq txt_row1 (read-line f_dat))<BR>                                                                       (setq bc_txt (strcat "(write-line \"" (tt_fk txt_row1) "\" f_dcl)"))<BR>                                                                       (write-line bc_txt f_wrt)                                                                                                                               <BR>       )<BR>       (write-line "(close f_dcl))" f_wrt)<BR>       (princ "\n 文件保存在")<BR>       (princ df_roc)<BR>       (close f_wrt)(close f_dat)<BR>)


(defun tt_fk(tt / k tr_k tr_kn nn a)<BR>       (setq nn (strlen tt) k 0 tr_k ""       a "\"")<BR>       (while (&lt;= k nn) <BR>                                                               (if (= (setq tr_kn (substr tt (setq k (+ k 1)) 1)) a)<BR>                                                                                               (setq tr_k (strcat tr_k "\\" tr_kn))<BR>                                                                                               (setq tr_k (strcat tr_k tr_kn))<BR>                                                               )) tr_k<BR>)<BR>(defun f_name(tt / k tr_k tr_kn nn a)<BR>               (setq nn(strlen tt) nn (1+ nn) tr_k "")<BR>               (while (/= "\\" (setq tr_kn (substr tt (setq nn (- nn 1)) 1))) <BR>                                                                               (setq tr_k (strcat tr_kn tr_k))<BR>               )<BR>);yxp制作于2004.11.18<BR>


需要注意的是,在LSP中调用DCL完毕后,对产生的垃圾DCL文件需要用其他程序来删除..


方法较笨,高手勿笑,也可能其他人已经解决了这个问题.

王咣生 发表于 2004-11-19 21:00:00

回复

参考:


<A href="dispbbs.asp?boardID=16&amp;ID=24805&amp;page=3" target="_blank" >dispbbs.asp?boardID=16&amp;ID=24805&amp;page=3</A>


和你的思路是一样的吧?

yxp 发表于 2004-11-19 21:05:00

楼上的斑竹





说实话我还是没有明白你的意思.

yxp 发表于 2004-11-19 21:10:00

再罗嗦一下,


运行DCL程序后,将生成的LISP代码复制到你需要合并的LISP文件里作为子程序


在调用DCL对话框之前,调用这个子程序即可.原创哦.

jicqj 发表于 2011-10-25 17:22:23

lisp生成文件 这样的调用 会不会被360当作病毒呢?
页: [1]
查看完整版本: 关于LISP和DCL的合并问题的另一种解决办法