一半苹果 2021-06-04 18:12 采纳率: 100%
浏览 401
已结题

python怎样读取身份证读卡器内容?

因为某些原因,我需要用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函数参数如下:

 

  • 写回答

2条回答 默认 最新

  • szrs0913 2021-07-12 19:19
    关注
    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的函数是一个指针。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日

悬赏问题

  • ¥60 不懂得怎么运行下载来的代码
  • ¥15 CST导出3D模型图为什么和软件显示不一样?
  • ¥15 加热反应炉PLC控制系统设计(相关搜索:梯形图)
  • ¥15 python 用Dorc包报错,我的写法和网上教的是一样的但是它显示无效参数,是什么问题
  • ¥15 经过滑动平均后的一维信号还原用什么结构好呢?
  • ¥15 指定IP电脑的访问设置
  • ¥30 matlab ode45 未发现警告,但是运行出错
  • ¥15 为什么devc++编译项目会失败啊
  • ¥15 vscode platformio
  • ¥15 代写uni代码,app唤醒