明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1920|回复: 11

[讨论] 将dwg dll写为二进制文本打包到vlx后还原文件的问题

[复制链接]
发表于 2019-8-18 04:45 | 显示全部楼层 |阅读模式
本帖最后由 言戲無軍 于 2019-8-18 10:56 编辑

将dwg dll写为二进制文本打包到vlx后还原文件的问题
dwg dll写为二进制文本有不死猫老师的函数
  1. [code=lisp];[code=lisp]Subject:binary conversion to text by lisp 二进制文件转文本
  2. ;Writen:nonsmall(不死猫)
  3. ;Date:2009 10 18
  4. ;All Rights Reserved 版权所有 nonsmall(不死猫)
  5. ;Contact: QQ:43797405 Email:nonsmall@163.com
  6. (defun binaryToText(FileName / ADODB.Stream)
  7.   (Setq ADODB.Stream (Vlax-Get-Or-Create-Object "ADODB.Stream" ))
  8.   (Vlax-Put-Property ADODB.Stream 'Type 1 )
  9.   (Vlax-Invoke ADODB.Stream 'Open )
  10.   (Vlax-Invoke-Method ADODB.Stream 'LoadFromFile FileName )
  11.   (Vlax-Put-Property ADODB.Stream 'Position 0 )
  12.   (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 ))))
  13.   (Vlax-Put-Property ADODB.Stream 'Position 0 )
  14.   (Vlax-Put-Property ADODB.Stream 'Type 2 )  
  15.   (Vlax-Put-Property ADODB.Stream 'CharSet "us-ascii" )
  16.   (Vlax-Invoke ADODB.Stream 'ReadText)
  17.   ;(vlax-release-object ADODB.Stream)
  18. )
  19. ;Test
  20. ;(binaryToText "d:\\new.fas")
  21. ;(binaryToText "d:\\034.dwg")
  22. ;(binaryToText "d:\\double_line.gif")
将二进制文本还原为dwg.dll的函数目前只看到高飞鸟的函数,在08CAD下,32位CAD正常使用,但在2010以上64位CAD都失败,WIN10 系统
  1. [code=lisp];;;Write Binary file from  strings 高飞鸟大师
  2. (defun WriteBinary1 (FileName buffer / wsObj str)
  3.   (if (setq wsObj (vlax-create-object "ScriptControl"))
  4.     (progn
  5.       (vlax-put wsObj "language" "VBS")
  6.       (setq str
  7.        "Sub WriteBinary(FileName, Buf)
  8.         Const adTypeBinary = 1
  9.         Const adSaveCreateOverWrite = 2
  10.         Dim stream, xmldom, node
  11.         Set xmldom = CreateObject("Microsoft.XMLDOM")
  12.         Set node = xmldom.CreateElement("binary")
  13.         node.DataType = "bin.hex"
  14.         node.Text = Buf
  15.         Set stream = CreateObject("ADODB.Stream")
  16.         stream.Type = adTypeBinary
  17.         stream.Open
  18.         stream.write node.NodeTypedValue
  19.         stream.saveToFile FileName, adSaveCreateOverWrite
  20.         stream.Close
  21.         Set stream = Nothing
  22.         Set node = Nothing
  23.         Set xmldom = Nothing
  24.         End Sub"
  25.       )
  26.       (vlax-invoke wsObj 'ExecuteStatement str)
  27.       (vlax-invoke wsObj 'run "WriteBinary" Filename buffer)
  28.       (vlax-release-object wsObj)
  29.       (princ)
  30.     )
  31.   )
  32. )
不知道有没有高手能将第二个还原的函数修改下,感觉vbs在高版本下可能受限制。或者共享下私藏。
拜托了。


高飞鸟大师在2011年就解决这个问题了,只支持32位CAD,如果有dynamwrapperx可以用新的
高飞鸟源码如下:真实能用的,猫老师那个不行。



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-8-18 16:33 | 显示全部楼层
本帖最后由 Kye 于 2019-8-18 17:47 编辑

请问怎么解决的?注册了支持scriptControl的64位DLL?      一一一一一一一一一一一一一一一一一一一一一一一一http://club.excelhome.net/forum. ... ead&tid=1418713  这上面提到的方法应该也可以,没测试。                                                                                                                                                           想知道如果不注册DLL之类,能有什么好办法没
 楼主| 发表于 2019-8-18 19:34 | 显示全部楼层
Kye 发表于 2019-8-18 18:37
高版已经翻译了啊!大侠又重新翻译了?64位CAD下(setq wsObj (vlax-create-object "ScriptControl"))这句运 ...

你没看出来,高版中间有一段VBS吗,那个不是vlisp,是脚本。
 楼主| 发表于 2019-8-18 17:52 | 显示全部楼层
Kye 发表于 2019-8-18 16:33
请问怎么解决的?注册了支持scriptControl的64位DLL?      一一一一一一一一一一一一一一一一一一一一一 ...

把文章里的vbs 翻译成vlisp就ok了
 楼主| 发表于 2019-8-18 06:15 | 显示全部楼层
我自己搜索解决了
发表于 2019-8-18 18:37 | 显示全部楼层
高版已经翻译了啊!大侠又重新翻译了?64位CAD下(setq wsObj (vlax-create-object "ScriptControl"))这句运行结果为nil(如果不注册支持ScriptControl的64位DLL),您如何避开的?
发表于 2019-8-18 21:35 | 显示全部楼层
我还以为高版混合运用就是翻译,谢谢啊,我是玩vb6搜到了vbs源代码,原作者程序解释才想起高版和黄老师的打包之类的贴子,才一路找过来的
发表于 2020-9-12 08:47 | 显示全部楼层
不懂VBS,可以把翻译后的源码贴上来吗?
发表于 2020-9-12 08:49 | 显示全部楼层
不懂VBS,可以把翻译后的源码贴上来吗?
发表于 2021-10-4 22:22 | 显示全部楼层
高级技巧,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 15:41 , Processed in 5.004861 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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