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

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日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料