Aardvark I2C API与VB导致异常

时间:2014-03-10 17:24:46

标签: vb.net api exception

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

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()例程时,它会中断。

我还创建了自己的项目,将thr 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.

我尝试进入异常设置并取消选中投掷的bix,但没有变化。

我足够精明,可以在VB中创建一些东西(我不喜欢在Aardvark Dongle的另一端连接的东西!),但我可以使用一些帮助。

谢谢你, 〜布雷特

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我在尝试通过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";
            }

        }
    }
}

答案 2 :(得分:0)

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

由于该应用程序是32位的,以便与另一个DLL兼容,所以我不能使用64位的版本。但是,一旦我下载了32位DLL,就可以使用32位构建。