0

TJvHidDeviceController クラスを使用して、HID デバイス情報を取得しています。2 つの HID デバイスを接続しましたが、SP_DEVICE_INTERFACE_DETAIL_DATA_A 構造の "DevicePath" を取得しようとすると、常にデバイス パスが "\" として取得されます。そのため、CreateFile 関数を開けません。この問題を解決するために私を助けてください。私のOSはwin7です。皆さんありがとう。

4

1 に答える 1

2

これは推測です!

私が考えることができる1つのことは次のとおりです。

TJvHidDeviceController は、A または W サフィックスを使用せずに Windows API 呼び出しを呼び出します。使用される構造は、ANSI バージョンの SP_DEVICE_INTERFACE_DETAIL_DATA_A です。現在、Delphi 2009 以降を使用している場合、ルーチンは SP_DEVICE_INTERFACE_DETAIL_DATA_W を予期します。サイズは同じなので見た目は問題ありません。ただし、保存される文字列は、ANSI エンコードではなく USC2 エンコード (WideChars) になります。したがって、すべての ANSI 文字の後に null バイトが存在します。TJvHidDeviceController はおそらく、StrPas などの関数を使用して文字配列をパスカル文字列に変換するため、最初の文字しか表示されません。

チェック: 構造体を埋める関数呼び出しの直後にブレークポイントを設定し、CPU ウィンドウを使用して内容をメモリ ダンプとして表示します。ANSI 文字が 1 バイトおきに表示され、その間にヌル バイトが表示される場合は、上記のシナリオが該当することを確認できます。

解決:

  1. 呼び出しがワイド バリアントを使用しているかどうかを確認し、それに応じて構造を変更します。
  2. 呼び出しがワイド バリアントを使用しているかどうかを確認し、代わりに A バリアントを使用します。これはおそらく最も簡単なオプションです。
于 2011-02-09T19:40:14.237 に答える