尝试添加类失败的实例

时间:2016-12-02 11:53:33

标签: c# vb.net hid

我尝试使用我的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

1 个答案:

答案 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