子陌老大,皱建大哥在不在?
好久没有来了,打搅一下!:)
我在开发一个考勤机的接口程序!因为动态连接库是用dephi开发的,我不太想用dephi开发所以就用c#在写它的程序,但是现在遇到一个问题!
比如在动态库EastRiver的库里有两个这样的函数
第一个
ReadClockRecordTotal: 读设备已经存储的记录数
语法:
function ReadClockRecordTotal(hPort: THandle; var data: Integer): Boolean;
参数说明:
hPort: 端口句柄, 调用OpenCommPort函数得到,需要联机
data: 返回记录数量
返回变量: 如果返回True表示成功,如果返回False表示失败。
第二个
ReadStandardRecord: 读所有刷卡记录
语法:
function ReadStandardRecord(hPort: THandle; Data: PChar; timeString: PChar; var mark: Char;
var flag: Integer; var cardTimes: Integer; var cardGroup: Integer): Boolean;
参数说明:
hPort: 端口句柄, 调用OpenCommPort函数得到,需要联机
data: 读回的卡号字符串, 缓冲区需大於20字节长度
timeString: 读回的14位刷卡时间字符串, 格式为yyyymmddhhmmss, 缓冲区需大於20字节长度
mark: 读卡机标识字符.
flag: 存储卡的结果, 对应二进制数各位的意义如下: flag = 0 : 表示为正常卡 flag.0 = 1 : 表示为非法门禁卡 flag.1 = 1 : 表示为非法考勤卡 flag.2 = 1 : 表示为黑名单卡
cardTimes: 发卡次数, 0-15
cardGroup: 卡的组别, 0-255
返回变量: 如果返回False表示当前记录读取失败,如果返回True表示成功
然后我在C#的项目里面做了个EastRiver类,然后用
[DllImport("EastRiver.dll")] public static extern bool ReadStandardRecord(int hPort,ref string Data,ref string timeString,ref string mark,ref int flag,ref int cardTimes,ref int cardGroup);//读刷卡记录(^2G)
[DllImport("EastRiver.dll")] public static extern bool ReadClockRecordTotal(int hPort,ref int data);//读设备已经存储的考勤记录数
连对接动态库,但是我在程序里用
string data="";
string timeString="";
string mark="";
int flag=0;
int cardTimes=0;
int cardGroup=0;
if(EastRiver.ReadStandardRecord(hport,ref data,ref timeString,ref mark,ref flag,ref cardTimes,ref cardGroup))//提取考勤数据
{
string sql="insert into n_kqjlu(cardid,sjian,skjg) values('"+data.ToString()+"','"+timeString.ToString()+"','"+num.ToString()+"')";
SqlDataAdapter myDataAdapter= new SqlDataAdapter(sql,myConnection);
DataSet dt=new DataSet();
myDataAdapter.Fill(dt);
RefreshDataGrid(data.ToString(),num.ToString(),timeString.ToString(),flag);
}
的时候不能提取到正常的卡号,出现string类型的数据都为"",因此我想是不是dephi里面的pchar类型到C#里面的string类型,我是不是转错了!第一个函数就一点问题都没有!int转int就不会出现为空或者出错的情况!