请问一下关于DCL中每一行前后双引号的问题~
将DCL写进LISP时,只需前后各有一个双引号即可使用,但好像不能对行使用分号进行注释;有些代码则是每一行的代码前后都有双引号,这样可以对需要的行注释。今天碰到的一个情况是对整个DCL只在最前和最后各加一个分号时出现了“ ; 错误: 输入的字符串太长”,对每一行的前后都添加分号后则可正常添加字符串了……请问有大佬帮详细解释一下这个每一行前后加不加分号的区别和不同作用吗?搜索了一下没得到清晰的答案,谢谢~本帖最后由 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错误
本帖最后由 llsheng_73 于 2025-4-28 13:48 编辑
逗亦斗霸 发表于 2025-4-28 12:50
不是哦,如果是popup_list或list_box中显示的话是最多255,但不会报错~
(strlen a)
_2$ (strlen a)
1176
(strlen (setq a(strcat a a a a)))
4704
就是直接出现的字符串,单个字符串的长度是有限制的,具体是多少忘记了,论坛有人专门研究过,但是通过其它函数比如直接读取TXT整个文本内容到一个字符串变量,没这个限制了,一次读取几M的字符到一个字符串变量都没问题
经过测试,直接出现的字符不能超过2305,下边增加一个字符就出现"错误: 输入的字符串太长"
(setq a"3332211111111110000000000555555555533333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333323433333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331234333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333")
llsheng_73 发表于 2025-4-26 18:38
首先,适当注释是好习惯,但过度注释不见得是好事
另外,注释加到原始的DCL里边就行
接下来的重点,把DCL ...
非常非常感谢大佬码这么多字来回复,其实我现在是直接在lsp中写DCL面板了,因为也是一知半解地改动学起、模仿着来,所以并没有完全领悟这里面深层次的作用和意义吧~以前觉得每行首发加""麻烦,今天看来还是加了的更好~再次感谢~ llsheng_73 发表于 2025-4-26 18:38
首先,适当注释是好习惯,但过度注释不见得是好事
另外,注释加到原始的DCL里边就行
接下来的重点,把DCL ...
73哥牛逼~!!! 逗亦斗霸 发表于 2025-4-26 21:36
非常非常感谢大佬码这么多字来回复,其实我现在是直接在lsp中写DCL面板了,因为也是一知半解地改动学起、 ...
还是先完全按DCL那样写好并预览没问题后再去收拾引号要快些,也不会出问题
直接在LSP中写DCL部分的字符串需要对引号特别注意,应该出现在DCL内部的引号必须转义,这个地方是最容易出问题的 提问不附代码,问题都没看懂 llsheng_73 发表于 2025-4-27 09:22
还是先完全按DCL那样写好并预览没问题后再去收拾引号要快些,也不会出问题
直接在LSP中写DCL部分的字符 ...
确实是的,还有\和"同时使用时也要注意,再次感谢(也包括先前的提问:handshake)~ tryhi 发表于 2025-4-27 09:50
提问不附代码,问题都没看懂
就是DCL代码整合到LSP里后每行首尾加双引号的作用和区别,没有特别的代码哦~ 逗亦斗霸 发表于 2025-4-27 11:57
就是DCL代码整合到LSP里后每行首尾加双引号的作用和区别,没有特别的代码哦~
你不是说出现了“ ; 错误: 输入的字符串太长”,那肯定有代码才会出现 tryhi 发表于 2025-4-28 11:47
你不是说出现了“ ; 错误: 输入的字符串太长”,那肯定有代码才会出现
就是添加了多个诸如:radio_button {label = \"下上\"; key = \"sx01\";}之类的按钮,其实就是想多设置一些按钮,20个吧,但每行首尾不加双引号的话好像第4个就不能设置了,每行添加双引号后不受限制~
页:
[1]
2