📄 mur100.cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "MUR100.h"
#include <vcl.h>
#include <StrUtils.hpp>
#pragma package(smart_init)
//---------------------------------------------------------------------------
HINSTANCE m_hDLL;
unsigned long snr;
unsigned short type;
unsigned char size;
unsigned char data[16];
unsigned char szpwd[6]={0xff,0xff,0xff,0xff,0xff,0xff};
TMUR100::TMUR100()
{
m_hDLL = LoadLibrary("RC500USB.dll");//打开动态库
if (m_hDLL==NULL)
{
ShowMessage("动态库加载失败!");
return;
}
//取得函数地址
(FARPROC &)RC500USB_init = GetProcAddress(m_hDLL,"RC500USB_init");
(FARPROC &)RC500USB_exit = GetProcAddress(m_hDLL,"RC500USB_exit");
(FARPROC &)RC500USB_request = GetProcAddress(m_hDLL,"RC500USB_request");
(FARPROC &)RC500USB_anticoll = GetProcAddress(m_hDLL,"RC500USB_anticoll");
(FARPROC &)RC500USB_anticoll2 = GetProcAddress(m_hDLL,"RC500USB_anticoll2");
(FARPROC &)RC500USB_select = GetProcAddress(m_hDLL,"RC500USB_select");
(FARPROC &)RC500USB_authentication = GetProcAddress(m_hDLL,"RC500USB_authentication");
(FARPROC &)RC500USB_authentication2 = GetProcAddress(m_hDLL,"RC500USB_authentication2");
(FARPROC &)RC500USB_authkey = GetProcAddress(m_hDLL,"RC500USB_authkey");
(FARPROC &)RC500USB_halt = GetProcAddress(m_hDLL,"RC500USB_halt");
(FARPROC &)RC500USB_read = GetProcAddress(m_hDLL,"RC500USB_read");
(FARPROC &)RC500USB_write = GetProcAddress(m_hDLL,"RC500USB_write");
(FARPROC &)RC500USB_writeval = GetProcAddress(m_hDLL,"RC500USB_writeval");
(FARPROC &)RC500USB_readval = GetProcAddress(m_hDLL,"RC500USB_readval");
(FARPROC &)RC500USB_value = GetProcAddress(m_hDLL,"RC500USB_value");
(FARPROC &)RC500USB_load_key = GetProcAddress(m_hDLL,"RC500USB_load_key");
(FARPROC &)RC500USB_reset = GetProcAddress(m_hDLL,"RC500USB_reset");
(FARPROC &)RC500USB_close = GetProcAddress(m_hDLL,"RC500USB_close");
(FARPROC &)RC500USB_config = GetProcAddress(m_hDLL,"RC500USB_config");
(FARPROC &)RC500USB_get_info = GetProcAddress(m_hDLL,"RC500USB_get_info");
(FARPROC &)RC500USB_set_control_bit = GetProcAddress(m_hDLL,"RC500USB_set_control_bit");
(FARPROC &)RC500USB_clr_control_bit = GetProcAddress(m_hDLL,"RC500USB_clr_control_bit");
(FARPROC &)RC500USB_buzzer = GetProcAddress(m_hDLL,"RC500USB_buzzer");
(FARPROC &)RC500USB_read_E2 = GetProcAddress(m_hDLL,"RC500USB_read_E2");
(FARPROC &)RC500USB_write_E2 = GetProcAddress(m_hDLL,"RC500USB_write_E2");
}
TMUR100::~TMUR100()
{
FreeLibrary(m_hDLL);//释放动态库句柄
}
bool TMUR100::init()
{
unsigned char c;
c=RC500USB_init();
if ((int)c==255)
{
ShowMessage("连接失败");
return false;
}
return true;
}
TMUR100::exit()
{
RC500USB_exit();
}
AnsiString TMUR100::GetCardNo()
{
if(RC500USB_request (1,type)!=0)
if(RC500USB_request (1,type)!=0)
if(RC500USB_request (1,type)!=0) //对读卡器进行操作
{
ShowMessage("感应区内没有卡");
return "";
}
if(RC500USB_anticoll(0,snr)!=0) //进行防碰撞选择,成功则返回卡号
{
ShowMessage("防碰撞错误");
return "";
}
if(RC500USB_select(snr,size)!=0) //选择卡
{
ShowMessage("选择卡错误");
return "";
}
return "0x"+AnsiString::IntToHex(snr,8);
}
bool TMUR100::ReadCard(int AFan,int ABlock,char *data)
{
if (GetCardNo()=="") return false;
int iFan(0),iBlock(0);
iFan = AFan ;
iBlock = ABlock ;
if(RC500USB_authkey(0,szpwd,iFan)!=0)
{
ShowMessage("验证错误");
return false;
}
if(RC500USB_read(iFan*4+iBlock,data)!=0)
{
ShowMessage("读取数据错误");
return false;
}
RC500USB_halt(); //挂起
return true;
}
bool TMUR100::WriteCard(int AFan,int ABlock,char *data)
{
if (GetCardNo()=="") return false;
int iFan(0),iBlock(0);
iFan = AFan ;
iBlock = ABlock;
if(RC500USB_authkey(0,szpwd,iFan)!=0)
{
ShowMessage("验证错误");
return false;
}
if(RC500USB_write(iFan*4+iBlock,data)!=0)
{
ShowMessage("写入数据错误");
return false;
}
RC500USB_halt(); //挂起
return true;
}
bool TMUR100::ReadInfo(AnsiString &ACode,AnsiString &AName)
{
unsigned char data[16]={'\0'};
if (!ReadCard(15,0,data)) return false;
AnsiString s1,s2;
for(int i=0;i<16;++i)
{
if (i<3)
{
// if (int(data[i])<10)
// s1+="0"+(AnsiString)data[i];
// else
s1+=IntToHex((int)data[i],2);
}
else
{
if (data[i]=='\0') break;
s2+=(char)data[i];
}
}
//ACode=IntToStr(StrToInt(s1));
ACode=s1;
AName=s2;
return true;
}
bool TMUR100::WriteInfo(AnsiString ACode,AnsiString AName)
{
if (AName.Trim().Length()>8 || ACode.ToInt()>16777215)
{
ShowMessage("员工卡号过大!");
return false;
}
if (AName.Trim().Length()>12)
{
ShowMessage("员工姓名过长!");
return false;
}
unsigned char data[16]={'\0'};
unsigned char val[3];
unsigned char tmp;
AnsiString s1,s2;
s1=AnsiString::IntToHex(StrToInt(ACode),6);
s2=AName;
val[0]=StrToInt("0x"+s1.SubString(0,2));
val[1]=StrToInt("0x"+s1.SubString(3,2));
val[2]=StrToInt("0x"+s1.SubString(5,2));
for(int i=0;i!=16;++i)
{
if (i<3)
data[i]=val[i];
else
{
tmp=s2.c_str()[i-3];
data[i]=tmp;
if (tmp == '\0') break;
}
}
if (!WriteCard(15,0,data)) return false;
return true;
}
bool TMUR100::ReadVal(int AFan,int ABlock,long &AValue)
{
if (GetCardNo()=="") return false;
int iFan(0),iBlock(0);
long lValue;
iFan = AFan ;
iBlock = ABlock ;
if(RC500USB_authkey(0,szpwd,iFan)!=0)
{
ShowMessage("验证错误");
return false;
}
if(RC500USB_readval(iFan*4+iBlock,lValue)!=0)
{
ShowMessage("读取数据错误");
return false;
}
RC500USB_halt(); //挂起
AValue=lValue;
return true;
}
bool TMUR100::WriteVal(int AFan,int ABlock,long AValue)
{
if (GetCardNo()=="") return false;
int iFan(0),iBlock(0);
long lValue;
iFan = AFan ;
iBlock = ABlock;
lValue = AValue;
if(RC500USB_authkey(0,szpwd,iFan)!=0)
{
ShowMessage("验证错误");
return false;
}
if(RC500USB_writeval(iFan*4+iBlock,lValue)!=0)
{
ShowMessage("写入数据错误");
return false;
}
RC500USB_halt(); //挂起
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -