3

私は C# と Windows プログラミングにかなり慣れていないので、USB HID デバイス間の通信を確立しようとしています。「SetupDiGetDevicexxxxxx」を使用してデバイス パスを正常に取得し、「CreateFile()」を使用してハンドルを取得しました。以下は私のコードです。

public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const int OPEN_EXISTING = 3;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
CreateFile(string Devicepath)
{
    HidHandle = CreateFile(Devicepath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);                     
}

デバイス ハンドル情報を取得した後、次のように書き込みファイル関数を呼び出しています。

Result = WriteFile(HidHandle, outputReportBuffer[], outputReportBuffer.Length, NumberOfBytesWritten, 0);     

Outputbuffer は長さ 8 のバイト配列です。 何らかの理由で、USB HID デバイスに書き込むことができませんでした。「結果」は常にゼロです。どんな助けでも大歓迎です。また、それが有効かどうかを確認する方法を教えてくださいHidHandle。プログラムを実行すると、「1124」と表示されます。

このタイプの質問に関する以前の投稿に従いました。 writefile() を使用して USB HID デバイスと正常に通信できませんが、助けはありません。

以下は、create file と writefile の 2 つの方法です。

[DllImport("kernel32.dll", SetLastError = true)]
private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, uint lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, uint hTemplateFile );    

[DllImport("kernel32.dll")]
static public extern bool WriteFile(int hFile,  byte lpBuffer, int nNumberOfBytesToWrite,  int lpNumberOfBytesWritten, int lpOverlapped)  
4

2 に答える 2

1

おそらく、このようなUSBライブラリを使用する必要があります

于 2012-10-01T20:35:59.050 に答える
0

このような低レベルの Win32 関数に浸っているのには何らかの理由があると確信していますが、.net 内の File クラスを使用するだけでファイルをどこかに書きたい場合は、お勧めします。

バイトを書きたいだけの場合、最も簡単な方法の 1 つは File.WriteAllBytes() メソッドを使用することです。

http://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx

于 2012-10-01T13:16:38.313 に答える