加载云端的lsp代码
(vl-load-com)(defun c:tt (/ url xPost startTime lispCode)
"加载云端的lsp代码"
;; 云端 URL
(setq url "https://tool.zml84.xyz/lisp/code_test/test.lsp")
;; 禁用缓存的方法1:URL添加时间戳参数
(setq url (strcat url
(if (vl-string-search "?" url)
"&"
"?"
)
"time="
(rtos (getvar "CDATE") 2 6) ;_获取当前时间
)
)
;;尝试创建 XMLHTTP 对象
(if(setq xPost (vlax-get-or-create-object "Microsoft.XMLHTTP"))
(progn
;; 同步打开连接
(vlax-invoke-method xPost 'open "GET" url :vlax-false)
;; 禁用缓存的方法2:禁用缓存的完整实现
(vlax-invoke-method
xPost
'SetRequestHeader
"If-Modified-Since"
"0"
) ;_设置请求头禁用缓存。
(vlax-invoke-method
xPost
'SetRequestHeader
"Cache-Control"
"no-cache"
) ;_标准HTTP请求头指令,其作用为:客户端必须向服务器验证缓存有效性。与响应头中的 Cache-Control 不同,此处是客户端主动声明缓存策略。
(vlax-invoke-method
xPost
'SetRequestHeader
"Pragma"
"no-cache"
) ;_针对HTTP/1.0客户端,与Cache-Control形成兼容性覆盖。
(vlax-invoke-method
xPost
'SetRequestHeader
"Expires"
"0"
) ;_设置资源过期时间为过去时间,强制客户端重新请求。
(vlax-invoke-method
xPost
'SetRequestHeader
"If-None-Match"
"*"
) ;_客户端要求服务器验证所有缓存版本,无论ETag(实体标签)具体值如何。
;; 发送请求
(vlax-invoke-method xPost 'send)
;; 判断状态,并添加超时机制
(setq startTime (getvar "DATE"))
(while (and(/= (vlax-get-property xPost 'readyState) 4)
(< (- (getvar "DATE") startTime) 5) ;_5秒超时
)
(princ "\r正在等待响应...")
)
;; 检查请求是否成功完成
(if(and (= (vlax-get-property xPost 'readyState) 4)
(= (vlax-get-property xPost 'status) 200)
)
(progn
;; 取出结果
(setq lispCode
(vlax-get-property xPost 'responseText)
)
;; 显示内容
(print lispCode)
;; 运行代码
(eval (read (strcat "(progn " lispCode ")")))
)
(princ (strcat "****出错啦。HTTP错误"
(itoa (vlax-get-property xPost 'status))
":"
(vlax-get-property xPost 'statusText)
)
)
)
;; 释放资源
(vlax-release-object xPost)
)
(princ "****出错啦。无法创建 XMLHTTP 对象。")
)
;; 静默退出
(princ)
)
hn10183051 发表于 2025-4-16 08:00
要能直接加载云端代码,怎么实现
在Gitee创建一个公共项目,然后把代码上传并记住路径,然后使用下面的VLDCL在线加载代码,将读取地址替换成你的lsp路径即可。
((lambda (/ OA OB)
(vl-load-com)
(and(setq OA "https://gitee.com/kozmos/tachyoncloud/raw/master/StableVLX/LoadVLDCL"
OB (vlax-create-object "winhttp.winhttprequest.5.1")
)
(progn (vlax-invoke OB "open" "get" OA :vlax-true)
(vlax-invoke OB "send")
(vlax-invoke OB "WaitforResponse" 1000)
(eval (read (vlax-get OB "ResponseText")))
(setq OB (vlax-release-object OB))
)
)
)
)
kozmosovia 发表于 2025-4-16 09:34
在Gitee创建一个公共项目,然后把代码上传并记住路径,然后使用下面的VLDCL在线加载代码,将读取地址替换 ...
哥,这个代码怎么只在每一个图形加载一次。我按照你的做法,程序加载一次,菜单栏又加载一次。有什么办法? kozmosovia 发表于 2025-4-16 13:35
fas可以读取URL的FAS数据,不保存成文件而是转stream,再用隐藏函数加载stream
更加通用的方式是用CURL ...
下载(临时)目录,加载后删除,文件大了有点卡, 大佬玩得高端. 想学习怎么做到的 有报错。不知道为什么 本帖最后由 kozmosovia 于 2025-4-15 16:13 编辑
你这好像读取的是个FAS或者VLX 要能直接加载云端代码,怎么实现 hn10183051 发表于 2025-4-16 08:00
要能直接加载云端代码,怎么实现
可以实现 kozmosovia 发表于 2025-4-16 09:34
在Gitee创建一个公共项目,然后把代码上传并记住路径,然后使用下面的VLDCL在线加载代码,将读取地址替换 ...
如果是VLX或者fas呢 fas可以读取URL的FAS数据,不保存成文件而是转stream,再用隐藏函数加载stream
更加通用的方式是用CURL或者XML下载VLX或者FAS到本地(临时)目录,加载后删除。
页:
[1]
2