言戲無軍 发表于 2019-8-18 04:45:40

将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 16:33:12

本帖最后由 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之类,能有什么好办法没

言戲無軍 发表于 2019-8-18 19:34:31

Kye 发表于 2019-8-18 18:37
高版已经翻译了啊!大侠又重新翻译了?64位CAD下(setq wsObj (vlax-create-object "ScriptControl"))这句运 ...

你没看出来,高版中间有一段VBS吗,那个不是vlisp,是脚本。

言戲無軍 发表于 2019-8-18 17:52:54

Kye 发表于 2019-8-18 16:33
请问怎么解决的?注册了支持scriptControl的64位DLL?      一一一一一一一一一一一一一一一一一一一一一 ...

把文章里的vbs 翻译成vlisp就ok了

言戲無軍 发表于 2019-8-18 06:15:55

我自己搜索解决了

Kye 发表于 2019-8-18 18:37:53

高版已经翻译了啊!大侠又重新翻译了?64位CAD下(setq wsObj (vlax-create-object "ScriptControl"))这句运行结果为nil(如果不注册支持ScriptControl的64位DLL),您如何避开的?

Kye 发表于 2019-8-18 21:35:48

我还以为高版混合运用就是翻译,谢谢啊,我是玩vb6搜到了vbs源代码,原作者程序解释才想起高版和黄老师的打包之类的贴子,才一路找过来的

清清绿茶 发表于 2020-9-12 08:47:10

不懂VBS,可以把翻译后的源码贴上来吗?

清清绿茶 发表于 2020-9-12 08:49:09

不懂VBS,可以把翻译后的源码贴上来吗?

LIULISHENG 发表于 2021-10-4 22:22:48

高级技巧,学习了
页: [1] 2
查看完整版本: 将dwg dll写为二进制文本打包到vlx后还原文件的问题