citysvip 发表于 2023-2-2 13:22:55

这个dllcall 应该怎么写,求教




函数名称读基本信息
语法long iReadCardBas(int iType, char* pOutInfo)
功能描述选择社保卡社会保障系统环境后,通过PSAM卡对社保卡进行内部认证,通过后将卡内的基本信息读出返回。
参数说明序号参数输入/输出类型长度(十进制)含义
1iTypeIN整数4操作卡的类型
2pOutInfoOUT字符串1024读出数据或返回错误信息
返回值0表示成功;非0表示失败。


(1)   输入参数iType表示执行本函数时操作卡的类型,定义如下:1-接触式操作卡;2-非接触式操作卡;3-自动寻卡,接触式操作卡优先;4-自动寻卡,非接触式操作卡优先。(2)   输出参数pOutInfo当函数执行成功时,该输出参数为读出的社保卡基本信息各数据项




我看函数的解释是把读出的数据保存在第二个参数中,不理解怎么操作,而且字符指针应该怎么写。

local $info="1"
$result=DllCall("SSCardDriver.dll", "LONG", "iReadCardBas", "INT", 1, "WSTR", $info)


msgbox(0,1,$info)

以上写法没法得到正确的结果。

zghwelcome 发表于 2023-2-2 13:35:04

$aRet = DllCall("SSCardDriver.dll", "int", "iReadCardBas", "int", 1, "str*","")
_arraydisplay($aRet)

3131210 发表于 2023-2-2 13:56:25

Local $v_Struct = DllStructCreate('char')
DllCall('SSCardDriver.dll', 'long', 'iReadCardBas', 'int', 1, 'char*', DllStructGetPtr($v_Struct))
MsgBox(0, 0, DllStructGetData($v_Struct, 1))
$v_Struct = 0

citysvip 发表于 2023-2-2 15:20:16

本帖最后由 citysvip 于 2023-2-2 15:21 编辑

谢谢两位,提供了思路,但都是有问题的。最终代码在2楼基础上取得,结果返回的是一个数组,第一个是函数的返回值,然后是后面的参数的值。#include <array.au3>
$result=DllCall("SSCardDriver.dll", "long", "iReadCardBas", "int", 1, "str", "")

_ArrayDisplay($result)

页: [1]
查看完整版本: 这个dllcall 应该怎么写,求教