- A+
在cad里面的lsp代码里面怎么实现取得自身程序的路径呢!?
在其他编程里面一般都会有直接性的函数可以取得本身的路径。但是lsp里面貌似没有直接可以取得自身的路径。作为新手的自己不懂肯定是百度查资料
或者想找个现成的例子了,但是结果是残酷的,不过多数都提到了注册表。这个可以考虑。不过CAD里面很多都是系统变量返回的数据。
于是我把手里有现成的插件用命令ap加载,看看能加载不,结果可以的,开始怀疑是安装包记录的安装程序路径。于是又更改路径,在次添加,结果还是可以
在选项设置里面的文件支持路径里面可以看见加载后的路径。排除安装包写注册的路径。
再次折腾,在注册里面搜索插件名称。无语,真的可以收到,再次搜索路径,也能。有了这个我就又换路径加载,在刷新注册表,发现有个注册的键值变了。
,cad2006版本的 找到的注册表如下:
[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R16.2\ACAD-4001:804\Profiles\<<未命名配置>>\Dialogs\Appload]
里面有几表项值,其中MainDialog的值就是当前cad加载应用插件的路径,只有使用lsp里面的自带读取注册表里面的值即可得到程序本身的路径。
读取注册表函数
(vl-registry-read "注册路径" "表项值名称")
例子
(VL-REGISTRY-READ (STRCAT "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R16.2\\ACAD-4001:804\\Profiles\\<<未命名配置>>\\Dialogs\\Appload" "MainDialog"))
复制
如果想做成通用,可以使用(vlax-product-key )函数返回对应版本的注册表路径
如:cad2006,返回 "Software\\Autodesk\\AutoCAD\\R16.2\\ACAD-4001:804"
可以使用下面组合返回当前配置
(vla-get-ActiveProfile (vla-get-Profiles (vla-get-Preferences (vlax-get-acad-object ) ) ) )
复制
后面的代码就好整了呀!直接按上面的套路加载即可得到当前程序自身的路径了哦!
注意的是必须写在lsp文件里面用ap命令加载,不可以直接在编辑器里面加载,这样是没有用的,其他软可以,,那是编译后运行才可以,lsp属于源码类型,编译后也需要加载,所有要想测试效果,必通过加载方式才能读写程序自身的路径;