2016-12-02 4 views
2

私は、VB.NETアプリケーションからC#USB HIDライブラリ(Mike O'BrienのオープンソースHIDLibrary)を使用しようとしています。私はクラスのメソッドの呼び出しを簡単に行うことができました。しかし、私が別のクラスで呼びたい別のメソッドは動作していません。 VSが "非共有メンバーへの参照がオブジェクト参照を必要とする"と言うので、他のクラスのように名前空間とクラス名を呼び出すことで直接アクセスすることはできません。クラスは公開されているので、私はそれを呼び出すことができるはずですが、OK、私は自分のアプリにオブジェクト参照を追加しようとしていて、 "New"にアクセスできないため、オーバーロード解決に失敗しました。 2つのクラス(そのうちの1つは「動作する」、もう1つは動作しません)は実質的に同じように設定されているように見えます:どちらも公開しようとしています。クラスのインスタンスを追加しようとすると失敗する

私はまだC#とOOPの新機能ですので、newbの質問をお詫びください

完全なクラスはかなり大きいので、「関連する」部分だけを含めるようにします。私が何かを残している場合は、私に知らせてください。

どのようにクラス私は、アクセスしたいとdは定義されています

using System; 
using System.Runtime.InteropServices; 
using System.Threading; 
using System.Threading.Tasks; 

namespace HidLibrary 
{ 
    public class HidDevice : IHidDevice 
    { ... 

そして、方法自体、私が呼び出そうとしている:私はこのDLLを呼び出すために私のVB.NETアプリを設定した

public bool ReadFeatureData(out byte[] data, byte reportId = 0) 

方法:

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'と入力します。 'New()'ポップアップ。 – Neal

+0

@Neal VS15では、残念ながら、開いているブラケットはすべて自動完成の閉じたブラケットになります。 – nobby

答えて

1

HidDeviceのコンストラクタはinternalなので、HidLibraryアセンブリ内の他のクラスからのみ呼び出すことができるため、 "新しい"アクセス不可能なエラーが発生していないため、オーバーロード解決に失敗しました。クラスはパブリックなので、おそらくインスタンスを作成するための他の方法があることを意味します。私はこのライブラリを一度も使用していませんが、HidDevicesの静的メソッドの1つ、すなわちのメソッドのうちの1つをにアクセスすると思われます。

例えば(完全にテストされていないコード!):

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

関連する問題