Я использую стороннюю dll для интеграции биометрического устройства zteco. Я добавляю zkemkeeper.dll с помощью TlbImp.exe и копируя его.Необработанное исключение типа «Исключение System.TypeInitializationException» произошло в RTEvents.exe
Вот мой основной код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace RTEvents
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
private void connectionToolStripMenuItem_Click(object sender, EventArgs e)
{
Connectivity con = new Connectivity();
con.MdiParent = this;
con.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
con.ControlBox = false;
con.MaximizeBox = false;
con.MinimizeBox = false;
con.Text = "";
con.Dock = DockStyle.Fill;
con.Show();
}
private void Main_Load(object sender, EventArgs e)
{
try
{
IsMdiContainer = true;
WindowState = FormWindowState.Normal;
this.toolStripStatusLabel1.Text = "Checking device status...";
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
Connection con = new Connection();
RealTimeEvents rt = new RealTimeEvents();
if (con.CheckConnectivity(Connection.axCZKEM1))
{
this.toolStripStatusLabel1.Text = "Device connected";
con.DeviceProcess(rt);
}
else
{
this.toolStripStatusLabel1.Text = "Device not connected";
}
}).Start();
}
catch { }
}
public void setStatusLabel(string text)
{
this.toolStripStatusLabel1.Text = text;
}
}
}
мой класс соединения
using System;
использованием System.Collections.Generic; с использованием System.Text;
пространства имен RTEvents { класс Connection { общественности статической строки IP = "192.168.1.3"; публичная статическая строка PORT = "4370"; публичная статическая строка MACHINE_NUMBER = "1"; Публичная статическая строка MASK = "65535"; public static zkemkeeper.CZKEMClass axCZKEM1 = новый zkemkeeper.CZKEMClass(); public static bool isConnected = false; общественного недействительными DeviceProcess (RealTimeEvents к.т.) {
if (Connection.axCZKEM1.RegEvent(Convert.ToInt32(MACHINE_NUMBER), Convert.ToInt32(MASK)))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all)
{
Connection.axCZKEM1.OnFinger += new zkemkeeper._IZKEMEvents_OnFingerEventHandler(rt.axCZKEM1_OnFinger);
Connection.axCZKEM1.OnVerify += new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(rt.axCZKEM1_OnVerify);
Connection.axCZKEM1.OnAttTransactionEx += new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(rt.axCZKEM1_OnAttTransactionEx);
Connection.axCZKEM1.OnFingerFeature += new zkemkeeper._IZKEMEvents_OnFingerFeatureEventHandler(rt.axCZKEM1_OnFingerFeature);
Connection.axCZKEM1.OnEnrollFingerEx += new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(rt.axCZKEM1_OnEnrollFingerEx);
Connection.axCZKEM1.OnDeleteTemplate += new zkemkeeper._IZKEMEvents_OnDeleteTemplateEventHandler(rt.axCZKEM1_OnDeleteTemplate);
Connection.axCZKEM1.OnNewUser += new zkemkeeper._IZKEMEvents_OnNewUserEventHandler(rt.axCZKEM1_OnNewUser);
Connection.axCZKEM1.OnHIDNum += new zkemkeeper._IZKEMEvents_OnHIDNumEventHandler(rt.axCZKEM1_OnHIDNum);
Connection.axCZKEM1.OnAlarm += new zkemkeeper._IZKEMEvents_OnAlarmEventHandler(rt.axCZKEM1_OnAlarm);
Connection.axCZKEM1.OnDoor += new zkemkeeper._IZKEMEvents_OnDoorEventHandler(rt.axCZKEM1_OnDoor);
Connection.axCZKEM1.OnWriteCard += new zkemkeeper._IZKEMEvents_OnWriteCardEventHandler(rt.axCZKEM1_OnWriteCard);
Connection.axCZKEM1.OnEmptyCard += new zkemkeeper._IZKEMEvents_OnEmptyCardEventHandler(rt.axCZKEM1_OnEmptyCard);
Connection.isConnected = true;
}
}
public void UnProcessDevice(RealTimeEvents rt)
{
Connection.axCZKEM1.Disconnect();
Connection.axCZKEM1.OnFinger -= new zkemkeeper._IZKEMEvents_OnFingerEventHandler(rt.axCZKEM1_OnFinger);
Connection.axCZKEM1.OnVerify -= new zkemkeeper._IZKEMEvents_OnVerifyEventHandler(rt.axCZKEM1_OnVerify);
Connection.axCZKEM1.OnAttTransactionEx -= new zkemkeeper._IZKEMEvents_OnAttTransactionExEventHandler(rt.axCZKEM1_OnAttTransactionEx);
Connection.axCZKEM1.OnFingerFeature -= new zkemkeeper._IZKEMEvents_OnFingerFeatureEventHandler(rt.axCZKEM1_OnFingerFeature);
Connection.axCZKEM1.OnEnrollFingerEx -= new zkemkeeper._IZKEMEvents_OnEnrollFingerExEventHandler(rt.axCZKEM1_OnEnrollFingerEx);
Connection.axCZKEM1.OnDeleteTemplate -= new zkemkeeper._IZKEMEvents_OnDeleteTemplateEventHandler(rt.axCZKEM1_OnDeleteTemplate);
Connection.axCZKEM1.OnNewUser -= new zkemkeeper._IZKEMEvents_OnNewUserEventHandler(rt.axCZKEM1_OnNewUser);
Connection.axCZKEM1.OnHIDNum -= new zkemkeeper._IZKEMEvents_OnHIDNumEventHandler(rt.axCZKEM1_OnHIDNum);
Connection.axCZKEM1.OnAlarm -= new zkemkeeper._IZKEMEvents_OnAlarmEventHandler(rt.axCZKEM1_OnAlarm);
Connection.axCZKEM1.OnDoor -= new zkemkeeper._IZKEMEvents_OnDoorEventHandler(rt.axCZKEM1_OnDoor);
Connection.axCZKEM1.OnWriteCard -= new zkemkeeper._IZKEMEvents_OnWriteCardEventHandler(rt.axCZKEM1_OnWriteCard);
Connection.axCZKEM1.OnEmptyCard -= new zkemkeeper._IZKEMEvents_OnEmptyCardEventHandler(rt.axCZKEM1_OnEmptyCard);
Connection.isConnected = false;
}
public bool CheckConnectivity(zkemkeeper.CZKEMClass axCZKEM1)
{
if (isConnected == false)
{
if (axCZKEM1.Connect_Net(IP, Convert.ToInt32(PORT)))
{
isConnected = true;
return isConnected;
}
else
{
return false;
}
}
return false;
}
}
}
это ошибка, и Я понятия не как ее решить Thats the error
https://drive.google.com/open?id=0B15rs9I9HpmsMV9kMnRCLWJQc2c это DLL для 32 битных окон 7 http://www.zkteco.com/support/SDK/39_55.html (Stand Alone SDK) u может получить оттуда dll отсюда. –
Я взглянул на эту .dll, и с помощью dotpeek можно увидеть, что это класс взаимодействия COM с директивой 00853A19-BD51-419B-9269-2DABE57EB61F. Конструктор класса использует атрибуты MethodImpl (InternalClass и MethodCodeType.Type.Runtime.Я попытаюсь включить эту DLL и попробовать. –
О, спасибо, я буду ждать вашего ответа. –