【问题标题】:Attempt to Add Instance of Class Fails尝试添加类实例失败
【发布时间】:2016-12-02 11:53:32
【问题描述】:

我正在尝试使用我的 VB.NET 应用程序中的 C# USB HID 库(Mike O'Brien 的开源 HIDLibrary)。我能够轻松地调用其中一个类中的方法。但是,我想在不同的类中调用的另一种方法不起作用。我不能像对另一个类那样调用命名空间和类名来直接访问它,因为 VS 抱怨“对非共享成员的引用需要对象引用”。该类是公共的,所以我认为我*应该“能够调用它,但是好的,所以我尝试在我的应用程序中添加一个对象引用,它抱怨“重载解决失败,因为没有“新”是可访问的”。这两个类(其中一个“工作”,另一个不工作)似乎设置几乎相同:它们都被声明为公共,就像我试图调用的两种方法一样。

我对 C# 和一般的 OOP 还是有点陌生​​,所以请原谅 newb 的问题。

完整的课程非常多,所以我将尝试只包含“相关”部分,但如果我遗漏了一些内容,请告诉我。

我想访问的类是如何定义的:

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

【问题讨论】:

  • 您可以随时查看该库的开源代码。但基于Overload resolution failed because no "New" is accessible 的事实 - 我认为类有公共构造函数(New),但它需要一些参数。其他选项:同一个类中必须有其他类或静态方法会创建一个实例
  • 在这一行 Dim HIDDeviceObj As New HidLibrary.HidDevice 尝试在末尾输入左括号,然后在 New() 弹出窗口中查看它要查找的变量。
  • @Neal 在 VS15 中,不幸的是,所有的左括号给你的是一个自动完成的右括号。
  • @nobby 我查看了该类的构造函数,它看起来需要 2 个字符串:HidDevice(string devicePath, string description = null) 您是否尝试将字符串放入其中?
  • @Neal 你的意思是在我的方法调用中吗?所以停止尝试声明 HidDevice 类的新实例,而是调用我的方法:If HidLibrary.HidDevice(ControllerString, "").ReadFeatureData(InBuff, reportID) Then 如果这就是你的意思,尝试一下,然后得到“HidDevice 是类类型,不能在表达式中使用”错误.

标签: c# vb.net hid


【解决方案1】:

HidDevice 的构造函数是internal,因此它只能从 HidLibrary 程序集中的其他类调用,这就是为什么会出现“重载解析失败,因为没有“新”可访问”错误。由于该类是公共的,这可能意味着还有其他方法可以创建实例。我从来没有使用过这个库,但快速浏览一下,您似乎应该使用HidDevices 上的静态方法之一,即GetDeviceEnumerate 方法之一来访问@987654329 的实例@。

例如(完全未经测试的代码!):

Dim data() As Byte
For Each device In HidDevices.Enumerate()
    If device.ReadFeatureData(data) Then
        ' Do something with data?
    End If
Next

【讨论】:

  • 啊,这更有意义! HidDevices.Enumerate 方法是我提到的那个正在工作的方法。我会试一试。谢谢!
猜你喜欢
  • 2015-10-17
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 2015-01-02
相关资源
最近更新 更多