📄 dlldef.pas
字号:
unit DllDef;
interface
USES WINDOWS,SysUtils,FORMS,Controls,DIALOGS;
//注:以下函数参数中,nport:读写器所使用的串口 COM1为1,COM2为2
// no:为卡型(1个字符)+卡号(5个数字字符),如'100005'
//返回值:0:OK 1:读写错误 2:卡已损坏
// 4: 串口错误 5:卡被更换 6:不是新卡
// 7: 卡为新卡 8:非本系统卡 14:数据有误
procedure ps(syspara:pchar);stdcall; external 'netbar.dll';
//传输系统标识 4个数字字符 如:PS('0001')
function Get_Version(nport:integer;info:pchar):integer;stdcall;external 'netbar.dll';
function OpenCom(nport:integer):boolean;stdcall;external 'netbar.dll';
procedure CloseCom;stdcall;external 'netbar.dll';
function PopCard(nport:integer):integer;stdcall;external 'netbar.dll';
//弹卡,用于自弹式发行机 如:i:=PopCard(1);
function ChkCard(nport:integer):integer;stdcall;external 'netbar.dll';
//检查是否插卡 如:i:=ChkCard(1); 0=插卡
function issue(nport:integer;no,info:pchar):integer;stdcall;external 'netbar.dll';
//发行卡:其中info:14个字符的串 即余额(6)+终止时间(8)
//例如:i:=issue(1,'100001','0080000210010202')将发行卡型为1,卡号为1,
// 余额为80.00 终止时间为2002.10.1的卡
function canc(nport:integer;no:pchar):integer;stdcall;external 'netbar.dll';
//注销卡
function change(nport:integer;no,info:pchar):integer;stdcall;external 'netbar.dll';
//修改卡,参数同issue
function ChgMoneyTimes(nport:integer;no,info:pchar):integer;stdcall;external 'netbar.dll';
//修改余额 如i:=ChgMoneyTimes(1,'100001','006000')
function getn(nport:integer;p:pchar):integer;stdcall;external 'netbar.dll' name 'getno';
//读取卡信息 P:存储读回的信息(20) 格式为卡型(1)+卡号(5)+到时(2)+余额(6)+终止时间(6)
//例如:读回信息为:'1000010010500212310202'表示:
//此卡卡型为1,卡号为1,余额为10.5元,终止时间为2002.12.31 02:02
function ReadSc(sc:pchar;sclen:integer):integer;stdcall;external 'netbar.dll';
function CmpSc(sc:pchar):integer;stdcall;external 'netbar.dll';
function WriteSc(sc:pchar):integer;stdcall;external 'netbar.dll';
function RdDat(cardtype,start,len:integer;buff:pchar):integer;stdcall;external 'netbar.dll';
function WrDat(cardtype,start,len:integer;buff:pchar):integer;stdcall;external 'netbar.dll';
function getno(nport:integer;var p:array of char):integer;
implementation
uses sys_global, finputpass;
function getno(nport:integer;var p:array of char):integer;
var
i:integer;
buff:array[0..15] of BYTE;
PASS:ARRAY[0..3] OF BYTE;
begin
result:=getn(nport,p);
IF RESULT<>8 THEN
EXIT;
result:=rddat(ID4442,252,4,@BUFF[0]);
IF RESULT<>0 THEN
EXIT;
IF BUFF[3]=$AA THEN BEGIN
RESULT:=8;
EXIT;
END;
result:=READSC(@PASS[0],4);
IF RESULT<>0 THEN BEGIN
IF RESULT=2 THEN BEGIN
BEEP;
if APPLICATION.MessageBox('卡已损坏,请换卡重试!','提示信息',MB_RETRYCANCEL or MB_ICONQUESTION)=idretry then
result:=getno(nport,p);
END;
EXIT;
END;
FOR I:=0 TO 2 DO
PASS[I]:=STRTOINT('$'+COPY(M_ICPASS,I*2+1,2));
result:=CMPSC(@PASS[0]);
IF RESULT<>0 THEN BEGIN
IF RESULT=2 THEN BEGIN
BEEP;
if APPLICATION.MessageBox(pchar('IC卡密码错误,卡已损坏!'+#13+#13+'请重新输入IC卡密码后换卡重试!'),
'提示信息',MB_OKCANCEL or MB_ICONWARNING)<>IDOK THEN
EXIT;
END ELSE BEGIN
BEEP;
if APPLICATION.MessageBox('IC卡密码错误,请重新输入!','提示信息',MB_OKCANCEL or MB_ICONWARNING)<>IDOK THEN
EXIT;
END;
Application.CreateForm(TF_INPUTPASS, F_INPUTPASS);
if f_inputpass.showmodal=mrok then
result:=getno(nport,p);
EXIT;
END;
FOR I:=0 TO 1 DO
BUFF[I+1]:=STRTOINT('$'+COPY(m_syspara,I*2+1,2));
BUFF[0]:=(BUFF[1]+BUFF[2]) MOD 256;
RESULT:=WRITESC(@BUFF[0]);
IF RESULT<>0 THEN
EXIT;
FOR I:=0 TO 2 DO
BUFF[I]:=BUFF[I] XOR $A5;
BUFF[3]:=$AA;
result:=WRdat(ID4442,252,4,@BUFF[0]);
IF RESULT<>0 THEN BEGIN
WRITESC(@PASS[0]);
EXIT;
END;
RESULT:=7;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -