【发布时间】: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 是类类型,不能在表达式中使用”错误.