找回密码
 加入
搜索
查看: 683|回复: 5

[网络通信] dllcall问题(已解决)

[复制链接]
发表于 2023-7-28 14:07:26 | 显示全部楼层 |阅读模式
本帖最后由 c123456789qs 于 2023-8-2 18:30 编辑

DllCall("card.dll", "str", "Hmac_SM3", "str", "H258", "str", "123456", "str", "2023-7-20", "str", $body, "str", "")

这是调用dll 来输出签名信息, $body 会有可能有10w左右的字符,但是au3 有字符限制,超过65536  就会溢出,这要怎么处理?




发表于 2023-7-28 22:28:58 | 显示全部楼层
自己申请内存,传指针
 楼主| 发表于 2023-7-31 15:25:42 | 显示全部楼层
本帖最后由 c123456789qs 于 2023-7-31 15:36 编辑
haijie1223 发表于 2023-7-28 22:28
自己申请内存,传指针

  $a = DllStructCreate("char var1[100000]")
DllStructSetData($a,"var1",$body )
DllCall($dll, "str", "Hmac_SM3", "str", "1", "str", '123456', "str", "0", "ptr",  DllStructGetPtr($a,1), "str", "")
改了下,字符多的也能出签名数据,但是发现只要有中文的,就会有问题,签名信息就没法通过验证。
DllStructGetData($a,"var1") 后 发现只要有中文就会数据不全。
发表于 2023-7-31 17:27:40 | 显示全部楼层
中文放入char怎么会不出错呢,应创建byte类型,参见论坛将中文字符放入结构体中的心得
发表于 2023-8-1 20:45:20 | 显示全部楼层
c123456789qs 发表于 2023-7-31 15:25
$a = DllStructCreate("char var1[100000]")
DllStructSetData($a,"var1",$body )
DllCall($dll, " ...

使用byte,然后用binarytostring自己转化,把各种编码都测试一下,看看哪个能用。
 楼主| 发表于 2023-8-2 18:29:00 | 显示全部楼层
ok 了 谢谢楼上2位
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 11:14 , Processed in 0.081397 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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