2016-12-02 3 views
2

저는 VB.NET 응용 프로그램에서 C# USB HID 라이브러리 (Mike O'Brien의 오픈 소스 HIDLibrary)를 사용하려고합니다. 클래스 중 하나에서 메서드를 쉽게 호출 할 수있었습니다. 그러나 다른 클래스에서 호출하고 싶은 다른 메서드는 작동하지 않습니다. 나는 VS가 "비공유 멤버에 대한 참조가 객체 참조를 필요로한다"고 불평하면서 다른 클래스에 대해했던 것처럼 네임 스페이스와 클래스 이름을 호출하여 직접 액세스 할 수 없습니다. 클래스는 공개되어 있으므로 "*"호출 할 수 있어야하지만 OK, 내 앱에 객체 참조를 추가하려고합니다. ""New "에 액세스 할 수 없기 때문에 오버로드가 실패했습니다." 두 클래스 (하나는 "작동"이고 다른 하나는 그렇지 않음)는 사실상 동일하게 설정되어있는 것처럼 보입니다. 둘 다 호출하려고하는 메소드와 마찬가지로 둘 다 public으로 선언됩니다.클래스 인스턴스를 추가하지 못했습니다.

나는 여전히 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) 

나는이 DLL로 호출 내 VB.NET 응용 프로그램을 설정 한 방법을 :

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

당신은 항상 해당 라이브러리의 오픈 소스를 확인할 수 있습니다. 그러나'New가 접근 할 수 없기 때문에'오버로드 해상도가 실패했다는 사실을 기반으로 - 나는 클래스가 public 생성자 ('New')를 가지고 있다고 생각하지만 그것은 약간의 매개 변수를 필요로합니다. 다른 옵션 : 같은 클래스에 인스턴스가 생성 될 다른 클래스 나 정적 메소드가 있어야합니다. – Fabio

+1

이 라인에서 'Dim HIDDeviceObj As New HidLibrary.HidDevice' 끝에 끝에 대괄호를 입력하고 in을 찾고있는 변수를 봅니다 'New()'팝업. – Neal

+0

@Neal VS15에서 열려있는 모든 대괄호는 자동 완성 된 닫힌 대괄호입니다. – nobby

답변

1

HidDevice의 생성자는 internal이므로 HidLibrary 어셈블리의 다른 클래스에서만 호출 할 수 있으므로 "새"액세스 가능하지 않음 "오류로 인해 오버로드 확인에 실패했습니다. 수업은 공개이므로 인스턴스를 만드는 다른 방법이 있음을 의미합니다. 나는이 라이브러리를 한번도 사용한 적이 없지만 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 
+0

아,이게 훨씬 더 합리적입니다! HidDevices.Enumerate 메서드가 내가 작동하는 것으로 언급 한 메서드입니다. – nobby

관련 문제