明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1565|回复: 17

[源码] 加载云端的lsp代码

  [复制链接]
发表于 2025-4-12 22:57:53 | 显示全部楼层 |阅读模式
  1. (vl-load-com)
  2. (defun c:tt (/ url xPost startTime lispCode)
  3.     "加载云端的lsp代码"

  4.     ;; 云端 URL
  5.     (setq url "https://tool.zml84.xyz/lisp/code_test/test.lsp")
  6.    
  7.     ;; 禁用缓存的方法1:URL添加时间戳参数
  8.     (setq url (strcat url
  9.           (if (vl-string-search "?" url)
  10.                 "&"
  11.                 "?"
  12.           )
  13.           "time="
  14.           (rtos (getvar "CDATE") 2 6) ;_获取当前时间
  15.         )
  16.     )

  17.     ;;尝试创建 XMLHTTP 对象
  18.     (if  (setq xPost (vlax-get-or-create-object "Microsoft.XMLHTTP"))
  19.         (progn

  20.             ;; 同步打开连接
  21.             (vlax-invoke-method xPost 'open "GET" url :vlax-false)

  22.             ;; 禁用缓存的方法2:禁用缓存的完整实现
  23.             (vlax-invoke-method
  24.                 xPost
  25.                 'SetRequestHeader
  26.                 "If-Modified-Since"
  27.                 "0"
  28.             ) ;_设置请求头禁用缓存。
  29.             (vlax-invoke-method
  30.                 xPost
  31.                 'SetRequestHeader
  32.                 "Cache-Control"
  33.                 "no-cache"
  34.             ) ;_标准HTTP请求头指令,其作用为:客户端必须向服务器验证缓存有效性。与响应头中的 Cache-Control 不同,此处是客户端主动声明缓存策略。
  35.             (vlax-invoke-method
  36.                 xPost
  37.                 'SetRequestHeader
  38.                 "Pragma"
  39.                 "no-cache"
  40.             ) ;_针对HTTP/1.0客户端,与Cache-Control形成兼容性覆盖。
  41.             (vlax-invoke-method
  42.                 xPost
  43.                 'SetRequestHeader
  44.                 "Expires"
  45.                 "0"
  46.             ) ;_设置资源过期时间为过去时间,强制客户端重新请求。
  47.             (vlax-invoke-method
  48.                 xPost
  49.                 'SetRequestHeader
  50.                 "If-None-Match"
  51.                 "*"
  52.             ) ;_客户端要求服务器验证所有缓存版本,无论ETag(实体标签)具体值如何。

  53.             ;; 发送请求
  54.             (vlax-invoke-method xPost 'send)

  55.             ;; 判断状态,并添加超时机制
  56.             (setq startTime (getvar "DATE"))
  57.             (while (and  (/= (vlax-get-property xPost 'readyState) 4)
  58.                         (< (- (getvar "DATE") startTime) 5) ;_5秒超时
  59.                     )
  60.                 (princ "\r正在等待响应...")
  61.             )

  62.             ;; 检查请求是否成功完成
  63.             (if  (and (= (vlax-get-property xPost 'readyState) 4)
  64.                     (= (vlax-get-property xPost 'status) 200)
  65.                 )
  66.                 (progn
  67.                     ;; 取出结果
  68.                     (setq lispCode
  69.                         (vlax-get-property xPost 'responseText)
  70.                     )

  71.                     ;; 显示内容
  72.                     (print lispCode)

  73.                     ;; 运行代码
  74.                     (eval (read (strcat "(progn " lispCode ")")))
  75.                 )
  76.                 (princ (strcat "****出错啦。HTTP错误"
  77.                         (itoa (vlax-get-property xPost 'status))
  78.                         ":"
  79.                         (vlax-get-property xPost 'statusText)
  80.                     )
  81.                 )
  82.             )

  83.             ;; 释放资源
  84.             (vlax-release-object xPost)
  85.         )
  86.         (princ "****出错啦。无法创建 XMLHTTP 对象。")
  87.     )

  88.     ;; 静默退出
  89.     (princ)
  90. )

评分

参与人数 3明经币 +3 金钱 +5 收起 理由
hn10183051 + 1
这只胆小鬼 + 1 很给力!
tigcat + 1 + 5 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-4-16 09:34:16 | 显示全部楼层
hn10183051 发表于 2025-4-16 08:00
要能直接加载云端代码,怎么实现

在Gitee创建一个公共项目,然后把代码上传并记住路径,然后使用下面的VLDCL在线加载代码,将读取地址替换成你的lsp路径即可。
  1. ((lambda (/ OA OB)
  2.    (vl-load-com)
  3.    (and  (setq OA "https://gitee.com/kozmos/tachyoncloud/raw/master/StableVLX/LoadVLDCL"
  4.         OB (vlax-create-object "winhttp.winhttprequest.5.1")
  5.   )
  6.   (progn (vlax-invoke OB "open" "get" OA :vlax-true)
  7.          (vlax-invoke OB "send")
  8.          (vlax-invoke OB "WaitforResponse" 1000)
  9.          (eval (read (vlax-get OB "ResponseText")))
  10.          (setq OB (vlax-release-object OB))
  11.   )
  12.    )
  13. )
  14. )


回复 支持 反对

使用道具 举报

发表于 2025-4-17 16:59:32 | 显示全部楼层
kozmosovia 发表于 2025-4-16 09:34
在Gitee创建一个公共项目,然后把代码上传并记住路径,然后使用下面的VLDCL在线加载代码,将读取地址替换 ...

哥,这个代码怎么只在每一个图形加载一次。我按照你的做法,程序加载一次,菜单栏又加载一次。有什么办法?
回复 支持 反对

使用道具 举报

发表于 2025-4-17 08:35:09 | 显示全部楼层
kozmosovia 发表于 2025-4-16 13:35
fas可以读取URL的FAS数据,不保存成文件而是转stream,再用隐藏函数加载stream

更加通用的方式是用CURL ...

下载(临时)目录,加载后删除,文件大了有点卡,
回复 支持 反对

使用道具 举报

发表于 2025-4-13 21:39:02 | 显示全部楼层
大佬玩得高端.
回复 支持 反对

使用道具 举报

发表于 2025-4-15 14:55:48 | 显示全部楼层
想学习怎么做到的
回复 支持 反对

使用道具 举报

发表于 2025-4-15 15:43:36 | 显示全部楼层
有报错。不知道为什么

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2025-4-15 16:10:24 | 显示全部楼层
本帖最后由 kozmosovia 于 2025-4-15 16:13 编辑

你这好像读取的是个FAS或者VLX
回复 支持 反对

使用道具 举报

发表于 2025-4-16 08:00:22 | 显示全部楼层
要能直接加载云端代码,怎么实现
回复 支持 反对

使用道具 举报

发表于 2025-4-16 08:28:15 | 显示全部楼层
hn10183051 发表于 2025-4-16 08:00
要能直接加载云端代码,怎么实现

可以实现
回复 支持 反对

使用道具 举报

发表于 2025-4-16 12:20:15 | 显示全部楼层
kozmosovia 发表于 2025-4-16 09:34
在Gitee创建一个公共项目,然后把代码上传并记住路径,然后使用下面的VLDCL在线加载代码,将读取地址替换 ...

如果是VLX或者fas呢
回复 支持 反对

使用道具 举报

发表于 2025-4-16 13:35:57 | 显示全部楼层
fas可以读取URL的FAS数据,不保存成文件而是转stream,再用隐藏函数加载stream

更加通用的方式是用CURL或者XML下载VLX或者FAS到本地(临时)目录,加载后删除。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-12 00:03 , Processed in 0.215259 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表