CAD 二次开发 实现在加载CUIX文件之后,自动加载DLL文件

CAD 二次开发 一个实现在加载CUIX文件之后,自动加载相同目录下DLL文件的方法

实现原理

CAD在加载cuix文件后,会自动运行一次同目录下的同名 *.mnl文件。
文件里是一段AutoLisp脚本,因此可以在脚本中写入加载命令。

使用ActiveX的方式
获取应用程序对象 acad,
然后从 acad.MenuGroups 菜单集合中的
MenuGroup.MenuFileName 属性获取cuix文件路径,从而加载目录下的dll文件

测试环境

中望CAD 2021

代码内容

以下是脚本 MYCUIX.mnl中的内容

; 将一段字符串用双引号括起来
(defun str-sharp (a) 
  (strcat "\"" a "\"")
)

; 将两个字符串转换为大写后,查找 A 字符串是否存在于 B 字符串中。
(defun find-string (a b) 
  (vl-string-search (strcase a) (strcase b))
)

; 需要先创建CUIX菜单,并在程序中安装,假设使用的是 MYCUIX.cuix
; 也要放置 MYCUIX.dll 到相同目录
(setq cuixname "MYCUIX")

; 使用ActiveX的方式自动从MenuGroups的MenuGroup.MenuFileName属性获取cuix文件路径,从而加载目录下的dll文件
(defun autoload_dll (MYCUIX) 
  (vl-load-com)
  (if (null *ZWCADOBJECT*) 
    (setq *ZWCADOBJECT* (vlax-get-acad-object))
  )
  (setq MenuGroups (vla-get-MenuGroups *ZWCADOBJECT*))
  (setq groupnum (vla-get-Count MenuGroups))
  (setq i 0)
  (setq cuixpath nil)
  (repeat groupnum 
    (setq groupobj (vla-item MenuGroups i))
    (setq grouppath (vla-get-MenuFileName groupobj))
    ; 找到文件名对应的菜单
    (if (find-string (strcat MYCUIX ".cuix") grouppath) 
      (setq cuixpath (vl-filename-directory grouppath))
    )
    (setq i (1+ i))
  )
  (if (setq cuixpath cuixpath) 
    (progn 
      ; 加载dll文件
      (setq cuixdll (strcat cuixpath "\\" MYCUIX ".dll"))
      (command "NETLOAD" (str-sharp cuixdll))
    )
  )
  (princ)
)

; 执行命令
(autoload_dll cuixname)
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值