我有一个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的另一端连接的东西!),但我可以使用一些帮助。
谢谢你, 〜布雷特
答案 0 :(得分:0)
答案 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位构建。