c123456789qs 发表于 2023-7-28 14:07:26

dllcall问题(已解决)

本帖最后由 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就会溢出,这要怎么处理?




haijie1223 发表于 2023-7-28 22:28:58

自己申请内存,传指针

c123456789qs 发表于 2023-7-31 15:25:42

本帖最后由 c123456789qs 于 2023-7-31 15:36 编辑

haijie1223 发表于 2023-7-28 22:28
自己申请内存,传指针
$a = DllStructCreate("char var1")
DllStructSetData($a,"var1",$body )
DllCall($dll, "str", "Hmac_SM3", "str", "1", "str", '123456', "str", "0", "ptr",DllStructGetPtr($a,1), "str", "")
改了下,字符多的也能出签名数据,但是发现只要有中文的,就会有问题,签名信息就没法通过验证。
DllStructGetData($a,"var1") 后 发现只要有中文就会数据不全。

tubaba 发表于 2023-7-31 17:27:40

中文放入char怎么会不出错呢,应创建byte类型,参见论坛将中文字符放入结构体中的心得

haijie1223 发表于 2023-8-1 20:45:20

c123456789qs 发表于 2023-7-31 15:25
$a = DllStructCreate("char var1")
DllStructSetData($a,"var1",$body )
DllCall($dll, " ...

使用byte,然后用binarytostring自己转化,把各种编码都测试一下,看看哪个能用。

c123456789qs 发表于 2023-8-2 18:29:00

ok 了 谢谢楼上2位
页: [1]
查看完整版本: dllcall问题(已解决)