因为某些原因,我需要用Python写一个脚本,连接神思身份证读卡器读取身份证信息后作他用,用ctypes调用sdtapi.dll文件,调用里面的函数SDT_StartFindIDCard、SDT_SelectIDCard都没有问题,但是最关键的一步,调用SDT_ReadBaseMsg函数老是出错,这个函数一共有5个参数,因为c++不怎么会,但是该函数参数我是iport = 1001,p2 =p2 = create_string_buffer(1024),p3=p2 = create_string_buffer(1024),puiCHMsgLen=0, puiPHMsgLen=0,然后老是出现
......
r = dl.SDT_ReadBaseMsg(iport,p2,puiCHMsgLen,p3,puiPHMsgLen,1)
OSError: exception: access violation writing 0x00000000
SDT_ReadBaseMsg函数参数如下:
port = c_int32(1001)
ifopen = c_int32(1)
pucManaInfo = create_string_buffer(4)
pucManaMsg = create_string_buffer(8)
dll.SDT_StartFindIDCard(port, pucManaInfo, ifopen)
dll.SDT_SelectIDCard(port, pucManaMsg, ifopen)
pucCHMsg = create_unicode_buffer(256)
pucPHMsg = create_string_buffer(1024)
puiCHMsgLen = c_uint(0)
puiPHMsgLen = c_uint(0)
ret = dll.SDT_ReadBaseMsg(port, pucCHMsg, byref(puiCHMsgLen), pucPHMsg, byref(puiPHMsgLen), ifopen)
print(pucCHMsg.value)
return pucCHMsg.value
注意 byref(puiCHMsgLen) c的函数是一个指针。
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。