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

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 Qcustomplot绘制实时动态曲线
  • ¥20 运用matlab画x-y图
  • ¥15 用idea运行项目,运行tomcat报错:断言失败
  • ¥15 Sqlserver查询链接服务器数据问题
  • ¥15 Bibtex4Word 引用中文文献
  • ¥20 用opencv c/c++ 转换成灰度图,然后做一下直方图均衡,输出mp4文件
  • ¥20 matlab中的双层数值积分
  • ¥50 服务器打印水晶报表问题
  • ¥30 gradle环境下javafx项目如何使用druid连接池
  • ¥15 服务器打印水晶报表问题