本帖最后由 llsheng_73 于 2025-4-26 18:47 编辑
首先,适当注释是好习惯,但过度注释不见得是好事
另外,注释加到原始的DCL里边就行
接下来的重点,把DCL写入LSP,这很重要,它使得编译或发布lsp不在需要给它配套一个DCL...实际意义不仅于止,熟悉了在LSP中DCL的写法后,完全可以在程序 运行过程中,根据运行的数据让程序在需要的时候生成DCL,那样就有可能同一个程序,对于不同的数据,它出现的DCL是不一样的,进一步增加程序的灵活性和适应能力。
那么手动应该怎么将原有的DCL在lsp中写出来呢?其实比较简单,首先是字符的转义,可以直接在原有dcl文件中将"全部替换为\",再为每行首尾都加上",然后全部复制,在LSP中把它们弄成一个表比如(setq dcltxt '( 粘贴上复制的内容 )),这样dcl的内容就成功写到lsp里边了
这个操作其实论坛上有函数可以直接将DCL文件改为lsp中的字符串或字符串表,建议熟悉了完全手动处理后搜索一下
接下来需要定义一个函数来完成将这部分内容写成真正的dcl并加载它,这个可以在论坛里边搜索到
下边贴上我从论坛上抄过来的
 - (defun mkdcl(str / dclF Fid dcl)
- (write-line(apply(function strcat)(if(listp str)str(list str)))
- (setq dclF(vl-filename-mktemp nil nil ".dcl")Fid(open dclF "w")))
- (close Fid)
- (setq dcl(load_dialog dclF))
- (vl-file-delete dclF)dcl)
然后就可以直接调用这个函数来将前边写在ls中的dcl内容加载进来(前提上dcl本身语义正确),比如
(setq dcl (mkdcl txt)),这里txt是前边先手工在DCL文件里边整理好并给到txt变量里边的
至于楼主说的分号;的问题,注意在LSP中,一般情况下;作为注释的开头,但在dcl中,;通常是控件属性的表达语句结束的标志,如果要在LSP中对DCL部分进行注释,建议首先在DCL原文件里边加上注释,再按前边说的办法给每行加"",如果要直接在lsp里边对dcl部分增加注释,那就一定要注意不要加到dcl内容的内部,也就是""之间,可以在每行后边"之后通过;来增加注释,总之不能把LSP的注释给不小心弄到DCL内容里边去,导致dcl错误
|