如何在C#中使用zKemKeeper连接考勤机?
我正在使用asp.net c#开发考勤软件,当我尝试使用asp.net c#连接生物识别设备(考勤打孔机)时,显示错误 错误: “试图读取或写入受保护的内存。这通常表示其他内存已损坏。” 我的代码:如何在C#中使用zKemKeeper连接考勤机?,c#,asp.net,biometrics,time-and-attendance,C#,Asp.net,Biometrics,Time And Attendance,我正在使用asp.net c#开发考勤软件,当我尝试使用asp.net c#连接生物识别设备(考勤打孔机)时,显示错误 错误: “试图读取或写入受保护的内存。这通常表示其他内存已损坏。” 我的代码: //internal Axzkemkeeper.AxCZKEM AxCZKEM1; //public Axzkemkeeper.AxCZKEM axCZKEM1 = new Axzkemkeeper.AxCZKEM(); //public zkemkeeper.CZKEM axCZK
//internal Axzkemkeeper.AxCZKEM AxCZKEM1;
//public Axzkemkeeper.AxCZKEM axCZKEM1 = new Axzkemkeeper.AxCZKEM();
//public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
//public delegate int DecompressMCX(int hComp,IntPtr in, uint in_len, IntPtr out, ref uint out_len, bool eod);
public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
private void Essl_Connect(string IpAddress, int MachineNo)
{
try
{
bConn = axCZKEM1.Connect_Net(IpAddress.Trim(), 8080);
//bConn = axCZKEM1.Connect_Net(IpAddress.Trim(), 4370);
if (bConn == true)
{
ScriptManager.RegisterStartupScript(this, GetType(), "Message", "alert('Connected')", true);
}
else
{
ScriptManager.RegisterStartupScript(this, GetType(), "Message", "alert('Not Connected')", true);
}
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, GetType(), "Error Message", "alert('" + ex.Message.ToString() + "')", true);
}
}
如果有人纠正此问题,是否有其他方法连接机器
如果我使用
public zkemceper.CZKEMClass axCZKEM1=new zkemceper.CZKEMClass()强>
它显示以下错误:
“无法嵌入互操作类型'zkemceeper.CZKEMClass'。请改用适用的接口。”
public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
private void btnconnect_Click(object sender, EventArgs e)
{
try
{
bool bIsConnected = axCZKEM1.Connect_Net(ip_address_of_your_machine, 4370); // 4370 is port no of attendance machine
if (bIsConnected == true)
{
MessageBox.Show("Device Connected Successfully");
}
else
{
MessageBox.Show("Device Not Connect");
}
}
Catch( (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
private bool IsRead = false;
string dwEnrollNumber;
int dwVerifyMode, dwInOutMode, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond, dwWorkcode, dwMachineNumber;
public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
public class ClsMachineBL
{
public String DownloadDataFromBiomatrix(ClsMachineML prp)
{
try
{
string constr = CommonConnection.ConStr;
con = new SqlConnection(constr);
con.Open();
cmd = new SqlCommand("Prc_InsertDatafromBiomatrix", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.Parameters.AddWithValue("@dwMachineNumber", prp.dwMachineNumber);
cmd.Parameters.AddWithValue("@dwEnrollNumber", prp.dwEnrollNumber);
cmd.Parameters.AddWithValue("@dwVerifyMode", prp.dwVerifyMode);
cmd.Parameters.AddWithValue("@dwInOutMode", prp.dwInOutMode);
cmd.Parameters.AddWithValue("@dwYear", prp.dwYear);
cmd.Parameters.AddWithValue("@dwMonth", prp.dwMonth);
cmd.Parameters.AddWithValue("@dwDay", prp.dwDay);
cmd.Parameters.AddWithValue("@dwHour", prp.dwHour);
cmd.Parameters.AddWithValue("@dwMinute", prp.dwMinute);
cmd.Parameters.AddWithValue("@dwSecond", prp.dwSecond);
cmd.Parameters.AddWithValue("@dwWorkcode", prp.dwWorkcode);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
BL.clsCommon objerr = new BL.clsCommon();
objerr.InesrtError("Error IS " + ex.Message + "_" + ex.StackTrace);
}
finally
{
cmd.Dispose();
con.Close();
con.Dispose();
}
return result;
}
}
public class ClsMachineML
{
public string Id { get; set; }
public string MachineNo { get; set; }
public string MachineIP { get; set; }
public string PortNo { get; set; }
public string Remark { get; set; }
public string Tuser { get; set; }
public string Tdate { get; set; }
public string Status { get; set; }
public int dwMachineNumber { get; set; }
public string dwEnrollNumber { get; set; }
public int dwVerifyMode { get; set; }
public int dwInOutMode { get; set; }
public int dwYear { get; set; }
public int dwMonth { get; set; }
public int dwDay { get; set; }
public int dwHour { get; set; }
public int dwMinute { get; set; }
public int dwSecond { get; set; }
public int dwWorkcode { get; set; }
public string User_Id { get; set; }
public string Name { get; set; }
public int Finger_Index { get; set; }
public string Finger_Image { get; set; }
public int Privilege { get; set; }
public string Passwords { get; set; }
public bool Enabled { get; set; }
public int Flag { get; set; }
public string Fromdate { get; set; }
public string Todate { get; set; }
}
private void btndownload_Click(object sender, EventArgs e)
{
ClsMachineBL obj = new ClsMachineBL();
ClsMachineML prp = new ClsMachineML();
try
{
if (cbmachine.Text == "" || cbmachine.Text == "Select")
{
MessageBox.Show("Please Select Machine");
cbmachine.Focus();
return;
}
progressBar1.Visible = true;
bool bIsConnected = axCZKEM1.Connect_Net(ip_address_of_your_machine, 4370); // 4370 is port no of attendance machine
if (bIsConnected == true)
{
IsRead = axCZKEM1.ReadGeneralLogData(dwMachineNumber);
if (IsRead == true)
{
progressBar1.Maximum = 100;
progressBar1.Step = 1;
progressBar1.Value = 0;
while (axCZKEM1.SSR_GetGeneralLogData(dwMachineNumber, out dwEnrollNumber, out dwVerifyMode, out dwInOutMode, out dwYear, out dwMonth, out dwDay, out dwHour, out dwMinute, out dwSecond, ref dwWorkcode))
{
prp.dwDay = dwDay;
prp.dwEnrollNumber = dwEnrollNumber;
prp.dwHour = dwHour;
prp.dwInOutMode = dwInOutMode;
prp.dwMachineNumber = dwMachineNumber;
prp.dwMinute = dwMinute;
prp.dwMonth = dwMonth;
prp.dwSecond = dwSecond;
prp.dwVerifyMode = dwVerifyMode;
prp.dwWorkcode = dwWorkcode;
prp.dwYear = dwYear;
string add = obj.DownloadDataFromBiomatrix(prp);
progressBar1.PerformStep();
}
string export = obj.ExportToAttendance(prp);
MessageBox.Show("Attendance Downloaded Successfully");
progressBar1.Visible = false;
}
else
{
MessageBox.Show("No Log Found....");
progressBar1.Visible = false;
}
}
else
{
MessageBox.Show("Device Not Connected");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
将dll interop.zkemkeeper的(属性)更改为False,嵌入类型为False。我认为您的第一个代码段中的
Catch((异常示例)
在语法上是不正确的。这对我来说是正确的答案。它起到了很好的作用
public zkemkeeper.CZKEM axCZKEM1 = new zkemkeeper.CZKEM();
private void btndownload_Click(object sender, EventArgs e)
{
bool bIsConnected = axCZKEM1.Connect_Net(ip_address_of_your_machine, 4370); // 4370 is port no of attendance machine
if (bIsConnected == true)
{
bool delete = axCZKEM1.ClearGLog(dwMachineNumber);
if (delete == true)
{
MessageBox.Show("Deleted.....");
}
if (delete == false)
{
MessageBox.Show("No Log Found To Delete.....");
}
}
}