一半苹果 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日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程