求大佬解决一下windos调用ddl时赋值BSTR不成功

jan-bar · · 2242 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我编写了一个go在widow下不用cgo,只用系统调用7z.dll,操作7z文件的代码。下面是项目地址 https://github.com/jan-bar/interesting/blob/master/zip7/main.go 当前的 [win_no_cgo.go#L216](https://github.com/jan-bar/interesting/blob/9c300c135a2822326ba911e00b5e2a2528310156/zip7/z7/win_no_cgo.go#L216)行是直接返回,可以成功读取7z文件。如下所示成功读取7z,打印文件名和CRC和修改时间等等 ![image.png](https://static.golangjob.cn/221216/99d97c86824817508acfe9640273cfc3.png) 一旦取消216行注释,那么7z.dll就会调用`CryptoGetTextPassword`方法,根据方法签名需要设置`BSTR *password` [win_no_cgo.go#L227](https://github.com/jan-bar/interesting/blob/9c300c135a2822326ba911e00b5e2a2528310156/zip7/z7/win_no_cgo.go#L227) ![image.png](https://static.golangjob.cn/221216/89b0b110537770b4945c3c5c65409a61.png) 通过阅读7z源码,这个字符串确实是通过`SysAllocString`申请的,但是我无论怎么试,怎么为pass赋值,执行都会报错。 有没有大佬帮忙解决一下这个问题。不然我这代码就只能读取不加密的7z压缩文件了。没有办法,那我就不深入研究了,直接exec调用`7za`可执行程序吧。系统调用太磨人了。本来还想写解压逻辑和压缩逻辑,要是不能把加密添加进去,感觉没啥意思了。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2242 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传