免内部函数获取VLX文件路径与FAS文件路径的方法原理与可靠性研究
本帖最后由 baitang36 于 2022-9-16 10:48 编辑不死猫大侠在http://bbs.mjtd.com/thread-186220-1-1.html?_dsign=f530f7a1中发布了一种免内部函数获取VLX文件路径与FAS文件路径的方法,很多朋友问我原理是什么?可靠性如何?
为了解答这个问题,我做了些研究。
我的结论是:这种方式是读取了上次执行load函数时在内存中遗留的痕迹,效果和(getvar "lastprompt")类似,跟加载时的命令行显示内容有关,但跟lastprompt这个系统变量无关。
由于是读取内存中遗留的痕迹,因此这部分数据是已经过期的,不受控制的,很可能受到其它因素的干扰,影响可靠性。用这种方法要多做试验,防止意外情况。
猫大侠要求在vlx中把获取路径的fas放到第一个文件的位置,目的就是在第一时间读到这个痕迹,减少干扰。
先做一个试验,把不死猫大侠的“自身路径.vlx“这个文件复制到C:\Program Files (x86)\AutoCAD 2008\下
在命令行输入(load "自身路径.vlx")回车
返回的是:
19 nil
并没有返回文件的路径。
把这个vlx文件直接拖到acad的绘图区,显示:
命令: (LOAD "C:/Program Files (x86)/AutoCAD 2008/自身路径.vlx")
"C:/Program Files (x86)/AutoCAD 2008/自身路径.vlx" nil
由此可以证明,这种方法和(getvar "lastprompt")一样,受命令行显示内容的影响。
test1.fas 是读取上次load函数执行痕迹的小试验程序,看不懂fas字节码的朋友请不要浪费币。
支持盛老师的的研究。 本帖最后由 不死猫 于 2022-9-16 11:32 编辑
之前有人问我不用内部函数能不能实现,所以硬找的一种方法出来。
lastprompt不支持APPload加载。
在搜索目录下的文件,也可以用(Findfile "自身路径.vlx")直接获取路径。
如果愿意用内部函数获取会更稳定,不愿意的话可以考虑使用这个方法,算是一种思路。
使用非内部函数的方法,国产CAD也可以采用这个方法去获取一些数据。
只是中望上面经过测试,并没有得到想要的数据,有点可惜。
大神门自己编写的fas文件在中望和浩辰等国产CAD上都不能正常加载,太可惜了。 ludaweb 发表于 2022-9-16 12:31
大神门自己编写的fas文件在中望和浩辰等国产CAD上都不能正常加载,太可惜了。
国产cad很少有人去研究 本帖最后由 hhh454 于 2022-9-16 16:13 编辑
ludaweb 发表于 2022-9-16 12:31
大神门自己编写的fas文件在中望和浩辰等国产CAD上都不能正常加载,太可惜了。
用官网自带的转化小程序就可以用,可能有些不能兼容,我测试过常用的函数都能用
hhh454 发表于 2022-9-16 16:11
用官网自带的转化小程序就可以用,可能有些不能兼容,我测试过常用的函数都能用
嗯,谢谢楼上热心回复,这里说的是大神自己编写的fas文件。 ludaweb 发表于 2022-9-16 17:22
嗯,谢谢楼上热心回复,这里说的是大神自己编写的fas文件。
嗯,改掉原始的结构了,估计是不行了,我用vlisp输出的fas用上面的转化后,都可以用的 hhh454 发表于 2022-9-16 17:32
嗯,改掉原始的结构了,估计是不行了,我用vlisp输出的fas用上面的转化后,都可以用的
转换程序对fas文件的结构要求很严格,稍微有差别就不能转换 与我测试结果差不多(在搜索路径下只能返回文件名), 如果要 在搜索目录下的文件 和 不在搜索目录下的文件两种情况 都获取到路径,需要增加一个判断,可以先用 (Findfile "自身路径.vlx") 如果返回 nil 然后用猫大侠的变量
页:
[1]