各位大佬能帮改下一个程序到中望CAD用吗
请问如何把这个改为中望2024使用,我把ObjectDBX.AxDbDocument.16改为中望“ZWCAD.Application.2024”的还是会出错,这段原在AutoCAD2006正常使用的。;;(vl-load-com)
;函数:GetFolder
;功能:调用Windows通用目录选取对话框,返回选中路径
;参数: msg-对话框提示字符串
(defun GetFolder (msg / WinShell shFolder path catchit)
;;(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
(setq
shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1)
)
(setq
catchit (vl-catch-all-apply
'(lambda ()
(setq shFolder (vlax-get-property shFolder 'self))
(setq path (vlax-get-property shFolder 'path))
)
)
)
(if (vl-catch-all-error-p catchit)
nil
path
)
)
(defun REGISTEROBJECTDBX (/ DBXSERVER) ;by Tony Tanzillo
(cond
((vl-registry-read
"HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument.16\\CLSID"
)
)
((not (setq DBXSERVER (findfile "AxDb16.dll")))
(alert "错误: 未能找到AxDb.dll文件")
)
(t
(startapp "regsvr32.exe" (strcat "/s "" DBXSERVER """))
(or
(vl-registry-read
"HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument.16\\CLSID"
)
(alert
"错误:注册失败"
)
)
)
)
)
(defun Main(DOC DwgName sset / App DOC DBXDOC NAME1)
(if (= "16" (substr (getvar "acadver") 1 2));CAD版本,祥见下
(progn
(if (not (REGISTEROBJECTDBX))
(exit)
)
(setq
DBXDOC (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.16")
)
)
(setq
DBXDOC (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.16")
)
)
(setq NAME1 (strcat (getvar "dwgprefix") (getvar "dwgname")))
(if (= NAME1 DwgName)
(Wl-DXFOut DOC DwgName sset nil)
(Wl-DXFOut DBXDOC DwgName sset t)
)
(vlax-release-object DBXDOC)
)
(defun Wl-DXFOut(DOC filename sset flags / )
(if Flags
(progn
(vla-open DOC filename)
(vlax-invoke-method DOC 'DXFOut (strcat (substr filename 1 (- (strlen filename) 4)) ".dxf"))
)
(vla-export DOC (substr filename 1 (- (strlen filename) 4)) "DXF" sset)
)
)
(defun c:dwdx( / Docs doc files file path i sset)
(setq Doc (vla-get-activedocument (vlax-get-acad-object)))
(setq path (GetFolder "选择文件夹"))
(if (not path)
(exit)
)
(setq files (vl-directory-files path "*.dwg" 1))
(setq sset (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
(setq i 0)
(repeat (length files)
(setq file (nth i files))
(main Doc (strcat path "\\" file) sset)
(setq i (1+ i))
)
(vlax-release-object sset)
(vlax-release-object doc)
(princ)
)
(Defun vldcl-GetDBXHost (/ KEY VAL)
(setq key "ObjectDBX.AxDbDocument"
val (atoi (getvar "acadver"))
)
(vla-GetInterfaceObject
(vlax-get-acad-object)
(if (< val 16)
key
(strcat key "." (itoa val))
)
)
) 试了一下,还是不行的 换个函数,在自己电脑时没找到“AxDb16.dll”这个文件,注册不了。
看高飞鸟大神的贴子,有你需要的:
http://bbs.mjtd.com/thread-192194-1-1.html stoyer 发表于 2025-3-11 10:47
换个函数,在自己电脑时没找到“AxDb16.dll”这个文件,注册不了。
看高飞鸟大神的贴子,有你需要的:
ht ...
没找到,在中望官网查了COM是ZWCAD.Application.2024,就是输出时出错,Error: Automation 错误 - "GetInterfaceObject"
页:
[1]