2016-12-12 56 views
0

我正在使用第三方dll來集成zteco生物識別設備。我已經使用TlbImp.exe添加zkemkeeper.dll並複製它。在RTEvents.exe中發生未處理的異常類型'System.TypeInitializationException'

Here is my connection class

這裏是我的主要代碼

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; 
     } 


    } 
} 

我的連接類使用System.Collections.Generic

using System; 

; using System.Text;

命名空間RTEvents { 類連接 { 公共靜態字符串IP = 「192.168.1.3」; public static string PORT =「4370」; public static string MACHINE_NUMBER =「1」; public static string MASK =「65535」; public static zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass(); public static bool isConnected = false; 公共無效DeviceProcess(RealTimeEvents RT) {

 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

回答

0

這種類型的異常被拋出時,一類被構造,不能分配一個特定的靜態屬性。

請參閱MDSN中的文檔;

https://msdn.microsoft.com/en-us/library/system.typeinitializationexception(v=vs.110).aspx#Static

在你的類,你有;

public static zkemkeeper.CZKEMClass ... = new zkemkeeper.CZKEMClass(); 

嘗試刪除此項(用於調試目的)並查看您的異常是否仍然拋出。如果不是,那麼你知道這是問題。至於爲什麼,我們需要更多關於這個zkemkeeper dll的信息。

+0

https://drive.google.com/open?id=0B15rs9I9HpmsMV9kMnRCLWJQc2c這是DLL是32位Windows 7 http://www.zkteco.com/support/SDK/39_55.html(獨立式SDK ) 你可以從這裏得到其餘的DLL。 –

+0

我看了一下這個.dll文件,並且使用dotpeek可以看到這是一個COM互操作類,引導了00853A19-BD51-419B-9269-2DABE57EB61F。該類的構造函數使用MethodImpl(InternalClass和MethodCodeType.Type.Runtime屬性,我將嘗試包括此dll並嘗試使用它 –

+0

噢,謝謝我會等待您的回覆 –

相關問題