将dwg dll写为二进制文本打包到vlx后还原文件的问题
本帖最后由 言戲無軍 于 2019-8-18 10:56 编辑将dwg dll写为二进制文本打包到vlx后还原文件的问题
将dwg dll写为二进制文本有不死猫老师的函数
;Subject:binary conversion to text by lisp 二进制文件转文本
;Writen:nonsmall(不死猫)
;Date:2009 10 18
;All Rights Reserved 版权所有 nonsmall(不死猫)
;Contact: QQ:43797405 Email:nonsmall@163.com
(defun binaryToText(FileName / ADODB.Stream)
(Setq ADODB.Stream (Vlax-Get-Or-Create-Object "ADODB.Stream" ))
(Vlax-Put-Property ADODB.Stream 'Type 1 )
(Vlax-Invoke ADODB.Stream 'Open )
(Vlax-Invoke-Method ADODB.Stream 'LoadFromFile FileName )
(Vlax-Put-Property ADODB.Stream 'Position 0 )
(Vlax-Invoke-Method ADODB.Stream 'Write (car (list (Vlax-Invoke-Method ADODB.Stream 'Read (Vlax-Get ADODB.Stream 'Size )) (Vlax-Put-Property ADODB.Stream 'Position 0 ))))
(Vlax-Put-Property ADODB.Stream 'Position 0 )
(Vlax-Put-Property ADODB.Stream 'Type 2 )
(Vlax-Put-Property ADODB.Stream 'CharSet "us-ascii" )
(Vlax-Invoke ADODB.Stream 'ReadText)
;(vlax-release-object ADODB.Stream)
)
;Test
;(binaryToText "d:\\new.fas")
;(binaryToText "d:\\034.dwg")
;(binaryToText "d:\\double_line.gif")将二进制文本还原为dwg.dll的函数目前只看到高飞鸟的函数,在08CAD下,32位CAD正常使用,但在2010以上64位CAD都失败,WIN10 系统
;;;Write Binary file fromstrings 高飞鸟大师
(defun WriteBinary1 (FileName buffer / wsObj str)
(if (setq wsObj (vlax-create-object "ScriptControl"))
(progn
(vlax-put wsObj "language" "VBS")
(setq str
"Sub WriteBinary(FileName, Buf)
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim stream, xmldom, node
Set xmldom = CreateObject(\"Microsoft.XMLDOM\")
Set node = xmldom.CreateElement(\"binary\")
node.DataType = \"bin.hex\"
node.Text = Buf
Set stream = CreateObject(\"ADODB.Stream\")
stream.Type = adTypeBinary
stream.Open
stream.write node.NodeTypedValue
stream.saveToFile FileName, adSaveCreateOverWrite
stream.Close
Set stream = Nothing
Set node = Nothing
Set xmldom = Nothing
End Sub"
)
(vlax-invoke wsObj 'ExecuteStatement str)
(vlax-invoke wsObj 'run "WriteBinary" Filename buffer)
(vlax-release-object wsObj)
(princ)
)
)
)不知道有没有高手能将第二个还原的函数修改下,感觉vbs在高版本下可能受限制。或者共享下私藏。
拜托了。
高飞鸟大师在2011年就解决这个问题了,只支持32位CAD,如果有dynamwrapperx可以用新的高飞鸟源码如下:真实能用的,猫老师那个不行。
本帖最后由 Kye 于 2019-8-18 17:47 编辑
言戲無軍 发表于 2019-8-18 06:15
我自己搜索解决了
请问怎么解决的?注册了支持scriptControl的64位DLL? 一一一一一一一一一一一一一一一一一一一一一一一一http://club.excelhome.net/forum.php?mod=viewthread&ordertype=1&threads=thread&tid=1418713这上面提到的方法应该也可以,没测试。 想知道如果不注册DLL之类,能有什么好办法没 Kye 发表于 2019-8-18 18:37
高版已经翻译了啊!大侠又重新翻译了?64位CAD下(setq wsObj (vlax-create-object "ScriptControl"))这句运 ...
你没看出来,高版中间有一段VBS吗,那个不是vlisp,是脚本。 Kye 发表于 2019-8-18 16:33
请问怎么解决的?注册了支持scriptControl的64位DLL? 一一一一一一一一一一一一一一一一一一一一一 ...
把文章里的vbs 翻译成vlisp就ok了 我自己搜索解决了 高版已经翻译了啊!大侠又重新翻译了?64位CAD下(setq wsObj (vlax-create-object "ScriptControl"))这句运行结果为nil(如果不注册支持ScriptControl的64位DLL),您如何避开的? 我还以为高版混合运用就是翻译,谢谢啊,我是玩vb6搜到了vbs源代码,原作者程序解释才想起高版和黄老师的打包之类的贴子,才一路找过来的 不懂VBS,可以把翻译后的源码贴上来吗? 不懂VBS,可以把翻译后的源码贴上来吗? 高级技巧,学习了
页:
[1]
2