我尝试使用我的VB.NET应用程序中的C#USB HID库(Mike O' Brien的开源HIDLibrary)。我能够轻松地调用其中一个类中的方法。但是,我想在另一个班级打电话的另一种方法是不行的。我无法通过调用命名空间和类名直接访问它,就像我为其他类所做的那样,因为VS抱怨"对非共享成员的引用需要对象引用"。这堂课是公开的,所以我认为我应该"能够调用它,但是好的,所以我尝试在我的应用程序中添加一个对象引用,它会抱怨"重载解析失败,因为没有"新的"可以访问"。这两个类(其中一个"工作",另一个没有)看起来几乎完全相同:它们都被宣布为公开,两种方法都是I& #39;我试图打电话。
我对C#和OOP仍然有点新意,所以请原谅新问题。
完整的课程非常大,所以我将尝试仅包括"相关的"部分,但如果我遗漏了一些东西,请告诉我。
如何定义我要访问的课程:
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
namespace HidLibrary
{
public class HidDevice : IHidDevice
{ ...
我尝试打电话的方法本身:
public bool ReadFeatureData(out byte[] data, byte reportId = 0)
我设置VB.NET应用程序以调用此dll的方式:
Imports HidLibrary
Public Class DeviceIDTest
Dim HIDDeviceObj As New HidLibrary.HidDevice
最后我尝试了一个方法调用:
If HidDeviceObj.ReadFeatureData(InBuff, reportID) Then
Return InBuff
Else
Return False
End If
答案 0 :(得分:1)
HidDevice
的构造函数是internal
,所以它只能从HidLibrary程序集中的其他类调用,这就是为什么你得到“重载解析失败,因为没有”New“可访问”错误。由于该类是公共的,这可能意味着还有一些其他方法来创建实例。我从来没有使用过这个库,但是从快速浏览一下,看起来好像你应该使用HidDevices
上的一种静态方法,即GetDevice
或其中一种Enumerate
方法,访问HidDevice
的实例。
例如(完全未经测试的代码!):
Dim data() As Byte
For Each device In HidDevices.Enumerate()
If device.ReadFeatureData(data) Then
' Do something with data?
End If
Next