1、C++提供的说明如下:设置多张卡片权限名单
int APIENTRY SetCardAuth(HANDLE ComHandle, int Address, unsigned long CardSN, char DoorNum, short CardNum, CARDAUTH &CardAuth)
功能:设置多张卡片权限名单(卡号连续)
参数:
IN:
int Address:控制器连网逻辑地址号。
unsigned long CardSN:设置权限的起始卡流水号。
char DoorNum:设置门号(0表示0号门,1表示1号门)
short CardNum:设置多张卡权限数量,从输入的CardSN号卡片开始顺序下载权限,
最多一次下载256(0~255)张卡片,256张卡片权限必须相同.例如,下
载10张卡号相连,权限相同的卡片时,该值取 0x09, 卡号以输入的
CardSN的卡号为起始卡号. 只下载一张时,该值取 0..
CARDAUTH &CardAuth:卡片权限结构体
typedef struct _CardAuth
{
long CardSnr; //卡号
char CardAvailDay[7]; //卡有效期
char DoorPassWord[5]; //开门密码
char DoorTime[2]; //门对应时段组
char AuthMark[2]; //权限标志
char CardMark; //卡标志(巡更卡、用户卡)
char ClearAuth[2]; //权限清空标志
}CARDAUTH;
long CardSnr:卡流水号
char CardAvailDay[7]:卡有效期(格式YYMMDD),BCD码字符串,最后一个字节
为结束符。
char DoorPassWord[5]:开门密码,BCD码字符串4位,最后一个字节为结束符。
char DoorTime[2]:门对应时段组。
DoorTime[0] 0号门时段组(0-15)
DoorTime[1] 1号门时段组(0-15)
char AuthMark[2]:权限标志
AuthMark[0] 0号门权限标志
AuthMark[1] 1号门权限标志
标志代码:
0x00:卡片无时限限制,有效期内任意时间有效。(即无时限)
0x01:卡片时限有效(卡片有时限)。
0x11:卡片任意时间无效。(即无权限,系统默认卡片无权限)
char CardMark:卡标志(1表示用户卡,0表示寻更卡)
char ClearAuth[2]:权限清空标志(默认为0,上位有清空指令时,改位置1)
ClearAuth[0] 0号门权限清空标志
ClearAuth[1] 1号门权限清空标志2、在 Delphi 中按以下方式声明:type struct_CardAuth = record
CardSnr: integer;
CardAvailDay: array[1..7] of char;
DoorPassWord: array[1..5] of char;
DoorTime: array[1..2] of char;
AuthMark: array[0..1] of char;
CardMark: char;
ClearAuth: array[1..2] of char;
end;
p_struct_CardAuth = ^struct_CardAuth;
function SetCardAuth(handle :longint;Address :longint; CardSN :longint; DoorNum: char; CardNum: longint; CARDAUTH: p_struct_CardAuth):integer ;stdcall;
far;external 'MJK2COMM.dll' name 'SetCardAuth';3、在 Delphi 中按以下方式调用:var
a : struct_CardAuth;
return_value : integer;begin
a.CardSnr := 4686;
a.CardAvailDay[1] := '1'; //char($1);
a.CardAvailDay[2] := '1';
a.CardAvailDay[3] := '1';
a.CardAvailDay[4] := '1';
a.CardAvailDay[5] := '1';
a.CardAvailDay[6] := '1';
a.CardAvailDay[7] := char($0); a.AuthMark[0] := '0'; // 0x00 为有权限
a.AuthMark[1] := '0'; return_value := SetCardAuth(ComHandle,
SpinEdit8.Value,
4686 , // 卡号
'0', // 门号, A门传0, B门传1
0,
@a); a.CardMark := '1';
end;4、调用为何总是不成功?请大家多赐教,谢谢。
int APIENTRY SetCardAuth(HANDLE ComHandle, int Address, unsigned long CardSN, char DoorNum, short CardNum, CARDAUTH &CardAuth)
功能:设置多张卡片权限名单(卡号连续)
参数:
IN:
int Address:控制器连网逻辑地址号。
unsigned long CardSN:设置权限的起始卡流水号。
char DoorNum:设置门号(0表示0号门,1表示1号门)
short CardNum:设置多张卡权限数量,从输入的CardSN号卡片开始顺序下载权限,
最多一次下载256(0~255)张卡片,256张卡片权限必须相同.例如,下
载10张卡号相连,权限相同的卡片时,该值取 0x09, 卡号以输入的
CardSN的卡号为起始卡号. 只下载一张时,该值取 0..
CARDAUTH &CardAuth:卡片权限结构体
typedef struct _CardAuth
{
long CardSnr; //卡号
char CardAvailDay[7]; //卡有效期
char DoorPassWord[5]; //开门密码
char DoorTime[2]; //门对应时段组
char AuthMark[2]; //权限标志
char CardMark; //卡标志(巡更卡、用户卡)
char ClearAuth[2]; //权限清空标志
}CARDAUTH;
long CardSnr:卡流水号
char CardAvailDay[7]:卡有效期(格式YYMMDD),BCD码字符串,最后一个字节
为结束符。
char DoorPassWord[5]:开门密码,BCD码字符串4位,最后一个字节为结束符。
char DoorTime[2]:门对应时段组。
DoorTime[0] 0号门时段组(0-15)
DoorTime[1] 1号门时段组(0-15)
char AuthMark[2]:权限标志
AuthMark[0] 0号门权限标志
AuthMark[1] 1号门权限标志
标志代码:
0x00:卡片无时限限制,有效期内任意时间有效。(即无时限)
0x01:卡片时限有效(卡片有时限)。
0x11:卡片任意时间无效。(即无权限,系统默认卡片无权限)
char CardMark:卡标志(1表示用户卡,0表示寻更卡)
char ClearAuth[2]:权限清空标志(默认为0,上位有清空指令时,改位置1)
ClearAuth[0] 0号门权限清空标志
ClearAuth[1] 1号门权限清空标志2、在 Delphi 中按以下方式声明:type struct_CardAuth = record
CardSnr: integer;
CardAvailDay: array[1..7] of char;
DoorPassWord: array[1..5] of char;
DoorTime: array[1..2] of char;
AuthMark: array[0..1] of char;
CardMark: char;
ClearAuth: array[1..2] of char;
end;
p_struct_CardAuth = ^struct_CardAuth;
function SetCardAuth(handle :longint;Address :longint; CardSN :longint; DoorNum: char; CardNum: longint; CARDAUTH: p_struct_CardAuth):integer ;stdcall;
far;external 'MJK2COMM.dll' name 'SetCardAuth';3、在 Delphi 中按以下方式调用:var
a : struct_CardAuth;
return_value : integer;begin
a.CardSnr := 4686;
a.CardAvailDay[1] := '1'; //char($1);
a.CardAvailDay[2] := '1';
a.CardAvailDay[3] := '1';
a.CardAvailDay[4] := '1';
a.CardAvailDay[5] := '1';
a.CardAvailDay[6] := '1';
a.CardAvailDay[7] := char($0); a.AuthMark[0] := '0'; // 0x00 为有权限
a.AuthMark[1] := '0'; return_value := SetCardAuth(ComHandle,
SpinEdit8.Value,
4686 , // 卡号
'0', // 门号, A门传0, B门传1
0,
@a); a.CardMark := '1';
end;4、调用为何总是不成功?请大家多赐教,谢谢。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货