本文主要是介绍USB-ID读卡器开发文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
QQ:954486673
微信:13822155058
淘宝:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-17663462243.14.60cc6baabEEfYn&id=562957272162
OUR_IDR.dll动态库使用说明
- 动态库简介
动态库OUR_IDR.dll用VC6.0++开发,编译成Release实体,适用于WIN98、NT、2000、XP、2003环境。本文档下面的源代码例子是C++builder 的调用格式。
本动态库是本公司免驱型USB接口ID卡读卡器的配套文件,必须和免驱型读卡器一起使用。免驱型读卡器使用的是HID人体学输入设备USB模式,即插即用,可在Win2000、XP、2003、Win7下使用,更可以在嵌入式系统WinCE下使用,但在WinCE下不是用OUR_IDR.dll动态库,本公司另外提供,如有需要请查看其他文档。
推荐用动态调用的方法使用本动态库。
一、让读卡器发出声音
函数名:idr_beep
功能 | 让读卡器发出声响。(暂不开放对指示灯的控制,如果有特殊要求请致电本公司) | |
原始声明 | unsigned char __stdcall idr_beep (unsigned long xms) | |
输入 | xms为响声的时间长度,单位为2毫秒 | |
返回 | 返回unsigned char值。 | |
返 回 值 说 明 | 0 | 操作成功,。 |
22 | 动态库或驱动程序异常,解决方法是退出程序,拔出ID卡读卡器,重装驱动程序再插上ID卡读卡器重试,或者重新拷贝动态库OUR_IDR.dll到正确的位置。 | |
24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是ID卡读卡器有问题,解决方法是重启电脑或重新拔插ID卡读卡器。 | |
27 | USB传输不稳定导致传输的字符不全。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | 请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |
二、读卡并返回卡的全部五个字节信息(ID卡厂商信息和卡序列号)
函数名:idr_read
功能 | 寻卡并返回该卡的序列号,如果卡在感应区,每次执行均返回卡号 | |
原始声明 | unsigned char __stdcall idr_read (unsigned char *serial) | |
输入 | 形参*serial只需指向一个至少已分配了5个char空间的可写数组 unsigned char *指针, serial的下标由0开始。Serial数组的内容无需赋值,因为此数组仅用于返回值。 | |
返回 | 返回unsigned char值,并将寻到的卡的序列号传值到*serial数组。 | |
返 回 值 说 明 | 0 | 操作成功,*serial数组中的数据有效。 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
22 | 动态库或驱动程序异常,解决方法是退出程序,拔出ID卡读卡器,重装驱动程序再插上ID卡读卡器重试,或者重新拷贝动态库OUR_IDR.dll到正确的位置。 | |
24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是ID卡读卡器有问题,解决方法是重启电脑或重新拔插ID卡读卡器。 | |
28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | /*******************{{piccrequest函数使用特例*********************************/ //卡序列号缓冲 unsigned char myserial[5]; unsigned char status; //函数指针声明 unsigned char (__stdcall *idr_read)(unsigned char *serial); //提示当前目录 AnsiString FileName=ExtractFilePath(Application->ExeName); //如果中没有"\"字符,就加进去 if(FileName.SubString(FileName.Length(),1) != "\\") { FileName += "\\"; } FileName += "OUR_IDR.dll"; if(!FileExists(FileName)) {//如果文件不存在 ShowMessage("无法在应用程序的文件夹找到ID卡读卡器动态库"); return; //返回 } HINSTANCE hDll; //加载动态库 hDll=LoadLibrary(FileName.c_str()); //提取动态库 idr_read = (unsigned char (__stdcall * idr_read)(unsigned char *serial))GetProcAddress(hDll," idr_read "); //调用函数 status = idr_read (myserial); //返回值处理 switch(status) { case 0: //TO-DO相应的处理,请在以下加入代码 break; case 1: break; //... } |
函数名:idr_read_8h10d_str
功能 | 寻卡并返回该卡的序列号,以字符串方式返回十位十进制卡号 | |
原始声明 | LPCSTR __stdcall idr_read_8h10d_str(void) | |
输入 | 无 | |
返回 | 返回LPCSTR值,。 | |
返 回 值 说 明 | 10位卡号 | 操作成功返回十位卡号字符串 |
ER08 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
ER22 | 动态库或驱动程序异常,解决方法是退出程序,拔出ID卡读卡器,重装驱动程序再插上ID卡读卡器重试,或者重新拷贝动态库OUR_IDR.dll到正确的位置。 | |
ER24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是ID卡读卡器有问题,解决方法是重启电脑或重新拔插ID卡读卡器。 | |
ER28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | Dim retstr As String '存放返回值 retstr = idr_read_8h10d_str() retstr = Left(retstr, 10) retstr = Trim(retstr) If Len(retstr) < 10 Then '有错误 Select Case retstr Case "ER08":
MsgBox "请将卡放在感应区"
Case "ER23":
MsgBox "机器没连上,或驱动程序未安装!"
Case Else MsgBox "异常" End Select ElseIf Len(retstr) = 10 Then
MsgBox ("读卡成功,卡号为" + retstr) End If |
三、读卡并返回卡的全部五个字节信息(ID卡厂商信息和卡序列号)
函数名:idr_read_once
功能 | 寻卡并返回该卡的序列号,如果卡在感应区,第一次执行返回卡号,再次执行提示寻不到卡,必须拿开卡隔一时间段再放到感应区,才能读卡成功。这种功能是用于刷卡一次卡仅返回一次卡号的情况。 | |
原始声明 | unsigned char __stdcall idr_read_ once (unsigned char *serial) | |
输入 | 形参*serial只需指向一个至少已分配了5个char空间的可写数组 unsigned char *指针, serial的下标由0开始。Serial数组的内容无需赋值,因为此数组仅用于返回值。 | |
返回 | 返回unsigned char值,并将寻到的卡的序列号传值到*serial数组。 | |
返 回 值 说 明 | 0 | 操作成功,*serial数组中的数据有效。 |
8 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
22 | 动态库或驱动程序异常,解决方法是退出程序,拔出ID卡读卡器,重装驱动程序再插上ID卡读卡器重试,或者重新拷贝动态库OUR_IDR.dll到正确的位置。 | |
24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是ID卡读卡器有问题,解决方法是重启电脑或重新拔插ID卡读卡器。 | |
28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | /*******************{{piccrequest函数使用特例*********************************/ //卡序列号缓冲 unsigned char myserial[5]; unsigned char status; //函数指针声明 unsigned char (__stdcall *idr_read_ once)(unsigned char *serial); //提示当前目录 AnsiString FileName=ExtractFilePath(Application->ExeName); //如果中没有"\"字符,就加进去 if(FileName.SubString(FileName.Length(),1) != "\\") { FileName += "\\"; } FileName += "OUR_IDR.dll"; if(!FileExists(FileName)) {//如果文件不存在 ShowMessage("无法在应用程序的文件夹找到ID卡读卡器动态库"); return; //返回 } HINSTANCE hDll; //加载动态库 hDll=LoadLibrary(FileName.c_str()); //提取动态库 idr_read = (unsigned char (__stdcall * idr_read)(unsigned char *serial))GetProcAddress(hDll," idr_read_ once "); //调用函数 status = idr_read_ once (myserial); //返回值处理 switch(status) { case 0: //TO-DO相应的处理,请在以下加入代码 break; case 1: break; //... } |
函数名:idr_read_once_8h10d_str
功能 | 寻卡并返回该卡的序列号,以字符串方式返回十位十进制卡号 | |
原始声明 | LPCSTR __stdcall idr_read_ once_8h10d_str(void) | |
输入 | 无 | |
返回 | 返回LPCSTR值,。 | |
返 回 值 说 明 | 10位卡号 | 操作成功返回十位卡号字符串 |
ER08 | 寻卡错误,根本就没有卡在感应区,*serial无效。 | |
ER22 | 动态库或驱动程序异常,解决方法是退出程序,拔出ID卡读卡器,重装驱动程序再插上ID卡读卡器重试,或者重新拷贝动态库OUR_IDR.dll到正确的位置。 | |
ER24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是ID卡读卡器有问题,解决方法是重启电脑或重新拔插ID卡读卡器。 | |
ER28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | Dim retstr As String '存放返回值 retstr = idr_read_ once_8h10d_str() retstr = Left(retstr, 10) retstr = Trim(retstr) If Len(retstr) < 10 Then '有错误 Select Case retstr Case "ER08":
MsgBox "请将卡放在感应区"
Case "ER23":
MsgBox "机器没连上,或驱动程序未安装!"
Case Else MsgBox "异常" End Select ElseIf Len(retstr) = 10 Then
MsgBox ("读卡成功,卡号为" + retstr) End If |
四、读出读卡器各自编码唯一的设备号
函数名:pcdgetdevicenumber
功能 | 读出读卡器各自编码唯一的设备号,此设备号可用于软件的产权保护,功能跟软件加密码类似。 | |
原始声明 | unsigned char __stdcall pcdgetdevicenumber(unsigned char *devicenumber); | |
输入 | 形参* devicenumber只需指向一个至少已分配了4个char空间的可写数组 unsigned char *指针,devicenumber的下标由0开始。devicenumber数组的内容无需赋值,因为此数组仅用于返回值。 | |
返回 | 返回unsigned char值,并将寻到的卡的序列号传值到* devicenumber数组。 | |
返 回 值 说 明 | 0 | 操作成功,* devicenumber数组中的数据有效。 |
22 | 动态库或驱动程序异常,解决方法是退出程序,拔出ID卡读卡器,重装驱动程序再插上ID卡读卡器重试,或者重新拷贝动态库OUR_IDR.dll到正确的位置。 | |
24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是ID卡读卡器有问题,解决方法是重启电脑或重新拔插ID卡读卡器。 | |
28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | /*******************{{piccrequest函数使用特例*********************************/ //卡序列号缓冲 unsigned char devicenumber [5]; unsigned char status; //函数指针声明 unsigned char (__stdcall * pcdgetdevicenumber)(unsigned char * devicenumber); //提示当前目录 AnsiString FileName=ExtractFilePath(Application->ExeName); //如果中没有"\"字符,就加进去 if(FileName.SubString(FileName.Length(),1) != "\\") { FileName += "\\"; } FileName += "OUR_IDR.dll"; if(!FileExists(FileName)) {//如果文件不存在 ShowMessage("无法在应用程序的文件夹找到ID卡读卡器动态库"); return; //返回 } HINSTANCE hDll; //加载动态库 hDll=LoadLibrary(FileName.c_str()); //提取动态库 idr_read = (unsigned char (__stdcall * pcdgetdevicenumber)(unsigned char * devicenumber))GetProcAddress(hDll," pcdgetdevicenumber "); //调用函数 status = pcdgetdevicenumber (devicenumber); //返回值处理 switch(status) { case 0: //TO-DO相应的处理,请在以下加入代码 break; case 1: break; //... } |
函数名:pcdgetdevicenumber_str
功能 | 读出读卡器各自编码唯一的设备号,此设备号可用于软件的产权保护,功能跟软件加密码类似。 | |
原始声明 | LPCSTR __stdcall pcdgetdevicenumber_str(void) | |
返回 | 返回 LPCSTR 字符串 | |
返 回 值 说 明 | 10位设备号 | 操作成功,返回10位设备号。 |
ER22 | 动态库或驱动程序异常,解决方法是退出程序,拔出ID卡读卡器,重装驱动程序再插上ID卡读卡器重试,或者重新拷贝动态库OUR_IDR.dll到正确的位置。 | |
ER 24 | 操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是ID卡读卡器有问题,解决方法是重启电脑或重新拔插ID卡读卡器。 | |
ER 28 | USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 | |
其他 | 未知错误 | |
例子及注释 | Dim retstr As String '存放返回值 retstr = pcdgetdevicenumber_str() retstr = Left(retstr, 10) retstr = Trim(retstr) If Len(retstr) < 10 Then '有错误 Select Case retstr
Case "ER23":
MsgBox "机器没连上,或驱动程序未安装!"
Case Else MsgBox "异常" End Select ElseIf Len(retstr) = 10 Then
MsgBox ("设备号十进制为" + retstr) End If |
注:原始声明指动态库的VC源码内的声明。
这篇关于USB-ID读卡器开发文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!