【问题标题】:Aardvark I2C API with VB causing exceptionAardvark I2C API 与 VB 导致异常
【发布时间】:2014-03-10 17:24:46
【问题描述】:

我有一个 Aardvard I2C/SPI 加密狗 (http://www.totalphase.com/products/aardvark-i2cspi/),可以很好地与他们提供的 GUI 配合使用。我想将该工具集成到我自己的测试 GUI 中。我正在使用 MS Visual Studio Express 2013。它们为 VB.NET (http://www.totalphase.com/downloads/) 提供了一个 API 包,该包包含在 aardvark_net.dll 中。当我运行他们的示例时,我在运行时收到以下错误:

An unhandled exception of type 'System.TypeInitializationException' occurred in WindowsApplication1.exe
Additional information: The type initializer for 'TotalPhase.AardvarkApi' threw an exception.

当代码尝试调用他们的 AardvarkApi.aa_find_devices() 例程时,它会中断。

我还创建了自己的项目,将 aardvark_net.dll 添加到项目引用中,以及以下代码:

Imports TotalPhase
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MsgBox("Detecting Aardvark adapters...")
        Dim num As Long
        Dim devices(15) As UShort

        ' Find all the attached devices
        Try
        num = AardvarkApi.aa_find_devices(16, devices)
    Catch ex As Exception
        MsgBox(ex.Message)

    End Try
    End Sub
End Class

同样,程序在 AardvarkApi.aa_find_devices() 处抛出异常,异常消息是:

The type initializer for 'TotalPhase.AardvarkApi' threw an exception.

我尝试转到异常设置并取消选中 Thrown bixes,但没有任何变化。

我足够精明,可以在 VB 中创建一些东西(我不擅长 Aardvark 加密狗另一端的连接!),但我可以在这方面寻求帮助。

谢谢你, 〜布雷特

【问题讨论】:

    标签: vb.net api exception


    【解决方案1】:

    发现问题了!我使用的是网站上的 API,但我有磁盘上的设备驱动程序。更新了设备驱动程序,它就消失了。 (奇怪的是,示例解决方案仍然抛出异常,但我的项目没有......使用相同的 DLL)

    【讨论】:

      【解决方案2】:

      我在尝试通过 C# GUI 连接时遇到了同样的错误。控制台应用程序工作正常。我将 CPU 设置更改为“任何 CPU”,它工作正常。默认情况下,它设置为 x86。 我的代码:

      namespace _test_project
      {
          public partial class Form1 : Form
          {
      
              int port = 0;
              int handle;        
      
              public Form1()
              {
                  InitializeComponent();
              }
      
      
              private void Form1_Load(object sender, EventArgs e)
              {
      
                  int numElem = 20;
                  ushort[] ports = new ushort [20];
                  uint[] uniqueIds = new uint[20];
                  int i=0;
      
      
                  int count = AardvarkApi.aa_find_devices_ext(numElem, ports, numElem, uniqueIds);
      
                  i = 20;                    
      
                  handle = AardvarkApi.aa_open(port);
      
                  if (handle <= 0)
                  {
                      toolStripStatusLabel1.Text = " Aardvark Not connected";
                      //Console.WriteLine("Unable to open Aardvark device on port {0}", port);
      
                      toolStripStatusLabel2.Text = "Error: " + Convert.ToString(AardvarkApi.aa_status_string(handle));
                      //Console.WriteLine("error: {0}", AardvarkApi.aa_status_string(handle));
                      //return;
                  }
                  else
                  {
                      toolStripStatusLabel1.Text = "Aardvark connected";
                  }
      
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        这取决于您下载了他们的哪个 Windows API 包。它必须与您构建的 CPU 选择相匹配。我最初在 VS2017 中使用“首选 32 位”C# 应用程序构建“任何 CPU”时遇到了这个问题,但事实证明我已经下载了 64 位 API。当我删除“首选 32 位”或构建为 x64 时,该软件包确实有效。

        由于应用程序是 32 位的以便与另一个 DLL 兼容,因此我无法使用 64 位版本。但是,一旦我下载了 32 位 DLL,32 位版本就可以工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-02
          • 1970-01-01
          • 2017-03-23
          • 2011-06-08
          • 2017-02-16
          相关资源
          最近更新 更多