精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 论坛浏览速度太慢? 教你赚取精币 - 每日签到

找工作/接单 百度招聘- 论坛招聘- 论坛接单- 猪八戒接单- 威客中国-

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

搜索
订阅<精易模块>源码若快打码 快速★准确★稳定★便宜
██招贤纳士:10K-30k保底██
██【免费网络验证】无需服务器███打码兔秒杀一切验证码██
全国PPTP秒换IP 动态VPN仅35元/月
若快打码 快速★准确★稳定★便宜
█招聘技术兼职或者公司全职皆可
██【易卡发卡平台】无需服务器█
█打码兔答题 速度快 极稳定█
★滴滴答题★8元万码★分成任加★█火眼答题-超速-极稳-高质量█
█不管是pc还是移动端的技术皆可
云速打码全天50%分成★稳定★快速
极速识别 滑块/汉字/字母 低至2元
免费淘客内部券API接口,技术支持
┏--实力收各种引流渠道有实力来--┓
█必须精通c++或者java作为基础
斗鱼最便宜人气招代理QQ910222910
高价收网吧/空间/终端人头量或Q量
免费淘客内部券API接口,技术支持
║   长期高价收各种量:转发量    ║
█通讯协议、内存接口、php皆可
斗鱼经济公司接口招代理910222910
高价收网吧/空间/终端人头量或Q量
收各种运营商量
║   长期高价收各种量:Q群量    ║
QQ38336720,非技术勿加,请自重
 精准附近人采集wxid附近人打招呼
高价收网吧/空间/终端人头量或Q量
收各种棋牌引流渠道
║   长期高价收各种量:空间量    ║
出直播平台主播关注量Q:977322367
精准添加手机号微信号无需提取wxid
高价收网吧/空间/终端人头量或Q量
收各种棋牌引流渠道
┗---------收各种渠道引流量---------┛
██免费网络验证 收款即时到帐█
手机号QQ号转换wxid
高价收网吧/空间/终端人头量或Q量
收各种棋牌引流渠道收购一切流量☞QQ:503830000☜全自动手机APP引流脚本,日1000+
微信全套引流软件
██软件作者+q:5208060求合作██
收安卓预装或静默安装量┏--出高质量男粉女粉,长期有量--┓
██████网站防360微信QQ拦截
好项目可洽谈商务合作
┏ ■ ■ 人傻钱多 Q:753310 ■ ■ ┓
高价收各种棋牌引流渠道q:54688888
┗--在线时时对接做单, 小白勿扰-┛
收网吧好友量联系Q:2258555555
☆英数打码☆
█ 稳收空间相册量转发量代拉量 █
百万资金寻渠道推广
好渠道,新项目皆可找我
收网吧好友量联系Q:2258555555
最强动态VPN 130+城市 全国最低价
█ 收各种引流渠道招聘引流人才 █
有渠道能推广的请联系我
只要有渠道推广皆可找我
收直播间评论引流Q:2258555555
高价收购各种引流渠道Q1241404222█ 承包引流工作室/收联盟流量 █
大小量都可以,不怕没钱就怕你没量
长期高价收各种引流软件
收直播间评论引流Q:2258555555
出一手双向Q好友拉群量Q709078880
┗ ■ ■菲律宾集团诚招合作■ ■ ┛
能推广请加202447914
长期高价收各种渠道引流量
诚心大量收联系QQ:2258555555
出售QQ好友代加双向拉群空间
█████ █大量收克隆/单项量
高价收空间转发量逆向群
长期高价收各种量:转发量
┎高价回收各类流量Q1634469555┓
长期高价收相册转发量:352509500
┏----收wap站 裂变量-微信流量---┓
大量收男双好友有货联系q770939119
长期高价收各种量:网吧量
┆ 承包各类引流,找软件制作者 ┆
长期高价收相册转发量:352509500
║收各种渠道流量/_收各种微信号║ 
全新三无163邮箱批发
长期高价收各种量:空间量
┆        百万诚聘站群优化者      ┆
另高价收上传相册号:352509500
┗--有货的请加微信:41752088谈--┛
收网吧转发空间QQ:1513888885
长期高价收各种量:棋牌量
┆     高价收网吧,空间转发量   ┆
另高价收上传相册号:352509500
十万好友量 加群量 逆向群Q950092
收网吧转发空间QQ:1513888885
长期高价收各种量:加群量
┗ ┈ 收购物各类资料,短信群发 ┈ ┛
另高价收上传相册号:352509500
█全国混拨VPS 3元/天 免费测试█
出空间男粉加Q群联系qq7785559
长期高价收各种量:人头量
收QQ微信推广引流加QQ2820301656
██收影视相关,线报,激活码,软件
┏--收量日结QQ308539080--┓
出空间男粉加Q群联系qq7785559
收各种棋牌引流渠道Q2820301656
█长期大量收各种男粉Q80003865█ 
QQ代加出租男双男单
┗--收量日结QQ308539080--┛
网吧加好友量 加群量 Q584979同行QQ精准获取对方QQ好友群成员
提供稳定微信支付渠道Q:3237546076
高价收大平台引流协议
WXID数据系列+V1V2数据系列/取/加
大量收购qq加群量q83887331
高价收各种量联系QQ86952358
收购qq微信流量资源Q3348775679
手机号q号等转wxidv1v2加人无限制
大量收女粉联系QQ267804
长期收引流方法和软件联系Q215034 我要租此广告位   
查看: 75|回复: 2
收起左侧

[易求助] 有关智能卡函数操作相关问题

[复制链接]

签到天数:11 天

结帖率:63% (5/8)
发表于 2017-9-14 13:55:48 | 显示全部楼层 |阅读模式
300精币
最近没什么事,就想做一个用智能卡的会员管理系统,于是上网买了个读卡器,和几张智能卡,用来测试,acr22u比较便宜就买的它,可惜官方的开发包实在看不懂,但是发现这个支持windos的pc/sc,于是就去找智能卡函数的资料,可惜资料是英文的而且是c++的,看不懂,只能边百度翻译,边尝试理解,这个是第一步,百度翻译的是建立资源管理器句柄,我也不明白为什么这么叫,
SCardEstablishContext函数官方介绍
https://technet.microsoft.com/zh-cn/library/aa379479
  
DLL命令名返回值类型公开备 注
SCardEstablishContext长整数型 返回资源管理器上下文的句柄
DLL库文件名:
WinSCard.dll
在DLL库中对应命令名:
SCardEstablishContext
参数名类 型传址数组备 注
dwScope整数型  :SCARD_SCOPE_USER   0
pvReserved1整数型  null
pvReserved2整数型  null
phContext整数型 



上面的函数已经没问题了改写成易语言就是下面这个样子
  
子程序名返回值类型公开备 注
建立管理器整数型 
参数名类 型参考可空数组备 注
b  
c  
变量名类 型静态数组备 注
局资源管理器句柄整数型  
SCARD_S_SUCCESS整数型  
SCARD_S_SUCCESS = SCardEstablishContext ( #SCARD_SCOPE_SYSTEM, b, c, 局资源管理器句柄)
调试输出 (SCARD_S_SUCCESS)
返回 (局资源管理器句柄)


i支持库列表   支持库注释   
spec特殊功能支持库
这个已经正常因为整数型的null不知道如何表达,就就建了两个参数然后不填写,
获得资源管理器的句柄,下面会用到
第二步获取系统中读卡器的列表SCardListReaders
函数介绍https://msdn.microsoft.com/en-us/library/windows/desktop/aa379793(v=vs.85).aspx
了解这个的时候发现有两个一个SCardListReadersA一个SCardListReadersW,百度了一下才是到分别是A=ansi然后w=unicode
好像原来听说过易不支持unicode所以最后用了SCardListReadersA
  
DLL命令名返回值类型公开备 注
SCardListReaders整数型 获得系统中安装的读卡器列表
DLL库文件名:
WinSCard.dll
在DLL库中对应命令名:
SCardListReadersA
参数名类 型传址数组备 注
hContex整数型  资源管理器上下文的句柄
mszGroups文本型  mszGroups:输入类型;读卡器组名,为NULL时,表示列出所有读卡器。
mszReaders文本型 mszReaders:输出类型;系统中安装的读卡器的名字
pcchReaders整数型 pcchReaders:输入输出类型;mszReaders的长度。

到这步已经开始出现问题了,
  
子程序名返回值类型公开备 注
获得列表  
变量名类 型静态数组备 注
啊啊整数型  
SCARD_S_SUCCESS整数型  
长度整数型  
SCARD_READERSTATE文本型  
列表文本型  
调试输出 (SCardListReaders (建立管理器 (), “”, SCARD_READERSTATE, 长度))
调试输出 (“----”)
调试输出 (SCARD_READERSTATE)
调试输出 (长度)


i支持库列表   支持库注释   
spec特殊功能支持库
看函数介绍翻译SCARD_READERSTATE就应该是返回的读卡器名字,“长度”返回名字字节数,但是调试后返回SCARD_READERSTATE返回空,字节数返回14
我怕错所以把读卡器拔了又重新获取了一次,长度变为0,SCARD_READERSTATE依然是空,我就感觉这个参数错了,可能是个结构数据,但是我不知道具体什么样,也不知道成员有什么,成员是文本型还是整数型,没有读卡器名字就无法发送数据,数据结构第一次解决不了,下面的问题还是另一个数据结构搞不懂,
获取不到读卡器名字怎么办呢,我想到了一个办法,从别人已经写好的程序里获取名字,
http://bbs.eyuyan.com/read.php?tid=395095这个帖子里的dome程序,是可以操作我的读卡器的,于是直接从他这里复制读卡器名字获得“ACS ACR122 0”这个名字,下面会用到。
第三步,建立连接,获取智能卡的句柄SCardConnect
官方函数介绍https://msdn.microsoft.com/en-us/library/windows/desktop/aa379473(v=vs.85).aspx

  
DLL命令名返回值类型公开备 注
SCardConnectA长整数型建立与智能卡的连接
DLL库文件名:
WinSCard.dll
在DLL库中对应命令名:
SCardConnectA
参数名类 型传址数组备 注
hContext整数型  输入类型;ScardEstablishContext()建立的资源管理器上下文的句柄。
szReader文本型  ,输入类型;包含智能卡的读卡器名称(读卡器名称由ScardListReaders()给出)
dwShareMode整数型  ,dwShareMode:输入类型;应用程序对智能卡的操作方式,SCARD_SHARE_SHARED(多个应用共享同一个智能卡)、SCARD_SHARE_EXCLUSIVE(应用独占智能卡)、SCARD_SHARE_DIRECT(应用将智能卡作为私有用途,直接操纵智能卡,不允许其它应用访问智能卡)。
dwPreferredProtocols整数型  ,dwPreferredProtocols:输入类型;连接使用的协yi,SCARD_PROTOCOL_T0(使用T=0协yi)、SCARD_PROTOCOL_T1(使用T=1协yi)。
phCard整数型 phCard:输出类型;与智能卡连接的句柄。
PdwActiveProtocol整数型 PdwActiveProtocol:输出类型;实际使用的协yi。


易语言调用这个是为一个比较顺利的函数了,第二个参数读卡器名称,我获取不到,直接填入从别人那里获取的,
  
子程序名返回值类型公开备 注
建立连接1整数型 
变量名类 型静态数组备 注
管理器句柄整数型  
智能卡句柄整数型  
协yi整数型  
管理器句柄 = 建立管理器 ()
调试输出 (SCardConnectA (读卡器句柄, “ACS ACR122 0”, #SCARD_SHARE_SHARED, #SCARD_PROTOCOL_T1, 智能卡句柄, 协yi))
返回 (智能卡句柄)


i支持库列表   支持库注释   
spec特殊功能支持库

获得智能卡句柄,下面函数会用到
第四步,发送数据并接受返回数据SCardTransmit
官方函数介绍
https://msdn.microsoft.com/en-us/library/windows/desktop/aa379804(v=vs.85).aspx
  
DLL命令名返回值类型公开备 注
SCardTransmit整数型 向智能卡发送指令,并接受返回的数据。
DLL库文件名:
WinSCard.dll
在DLL库中对应命令名:
SCardTransmit
参数名类 型传址数组备 注
hCard整数型  ,hCard:输入类型;与智能卡连接的句柄。
pioSendPci整数型  ,pioSendPci:输入类型;指令的协yi头结构的指针,由SCARD_IO_REQUEST结构定义。后面是使用的协yi的协yi控制信息。一般使用系统定义的结构,SCARD_PCI_T0(T=0协yi)、 SCARD_PCI_T1(T=1协yi)、SCARD_PCI_RAW(原始协yi)。
pbSendBuffer文本型 ,pbSendBuffer:输入类型;要发送到智能卡的数据的指针。(
cbSendLength整数型  ,cbSendLength:输入类型;pbSendBuffer的字节数目。
pioRecvPci文本型 pioRecvPci:输入输出类型;指令协yi头结构的指针,后面是使用的协yi的协yi控制信息,如果不返回协yi控制信息,可以为NULL。
pbRecvBuffer文本型 pbRecvBuffer:输入输出类型;从智能卡返回的数据的指针。
pcbRecvLength整数型 pcbRecvLength:输入输出类型;pbRecvBuffer的大小和实际大小。


易语言调用
  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
数据APDU  
数据.CLA = 到字节 (十六进制 (“ff”))
数据.ins = 到字节 (十六进制 (“00”))
数据.p1 = 到字节 (十六进制 (“40”))
数据.p2 = 到字节 (十六进制 (“06”))
数据.le = 到字节 (十六进制 (“04”))
数据.p3 = 到字节 (十六进制 (“05050801”))
' 上面数据结构自己编 的感觉不对就没有那个
智能卡发送指令 (集智能卡句柄, “FF 00 40 0F 04 00 00 00 00h”)
子程序名返回值类型公开备 注
智能卡发送指令  
参数名类 型参考可空数组备 注
智能卡句柄整数型   
APDU内容文本型   APDU = “FF 00 40 50 04 05 05 03 01h”   红灯闪烁
啊啊整数型  
变量名类 型静态数组备 注
a文本型  
b文本型  
c整数型  
调试输出 (SCardTransmit (智能卡句柄, 2, APDU内容, 取文本长度 (APDU内容) - 1, a, b, c))
' 如果返回“6”,则是智能卡句柄错误
调试输出 (a, b, c, 取文本长度 (APDU内容), 智能卡句柄)


i支持库列表   支持库注释   
spec特殊功能支持库
到这又遇到一个数据结构问题,就是第3个参数,“APDU”看翻译应该也是一个数据结构,但是我还是看不懂c++的那种翻译到易语言什么样子,。
我翻过的资料地址

这个是偶尔返回错误代码的解释,比如6句柄错误,1734,数据边界错误
http://www.cnblogs.com/braver/articles/2563157.html
函数错误代码介绍,易语言需要用计算器算一下返回的代码十进制转十六进制再到下面去找错误代码介绍,比如“-2146435068”=“0x80100004”:一个或多个参数错误
https://msdn.microsoft.com/en-us/library/windows/desktop/aa374738(v=vs.85).aspx#smart_card_return_values

以上内容主要参考这两个,但是这个是vb的,唉,易语言这方面资料太少了
http://blog.sina.com.cn/s/blog_a20257d80102uy9u.html
http://www.cnblogs.com/android-html5/archive/2010/09/01/2533989.html


现在想问问有谁研究过这方面的资料源码,能不能分享一下,或者能知道获取列表的数据结构和发送数据的数据结构在易语言里什么样子,,如果看到我上面有什么错误麻烦指出来,我好继续改。
下面是我用到的资料文件以及我暂时写的源码。









回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 帖子申请荣誉值,获得 1点 荣誉值,荣誉值可兑换终身vip用户组哦。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

签到天数: 11 天

结帖率:63% (5/8)
 楼主| 发表于 2017-9-14 14:01:05 | 显示全部楼层
这里是资料附件 资读卡器料.zip (2.89 MB, 下载次数: 0)

您可以选择打赏方式支持他

打赏
回复

使用道具 举报

签到天数: 19 天

结帖率:100% (3/3)
发表于 2017-9-14 14:25:15 | 显示全部楼层
哇 感觉像是在看定制单

您可以选择打赏方式支持他

打赏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

快速回复 收藏帖子 返回列表

sitemap|易语言源码|易语言教程|易语言论坛|诚聘英才|易语言模块|Archiver|手机版|联系我们|精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 8000736861120671429,邮箱:800073686@b.qq.com
Powered by Discuz! X3.2 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125

快速回复 返回顶部 返回列表