5

Python を使用して汎用 HID デバイスと通信しようとしています。

C で記述された HIDAPI ライブラリは libusb1.0 を凌駕し、シンプルで安定したクロスプラットフォーム HID 通信を実現することを読みました。ただし、Python スクリプト内から HIDAPI 関数を呼び出す方法を示すことを気にした人は誰もいません。それが私が問題を抱えているところです。

次のような本当に単純な C 関数を呼び出すのに十分な ctypes を理解しています。

int add(int n1, int n2) {
    return n1 + n2;
    }

問題は、HIDAPI 関数がより複雑であることです ( HIDAPI ヘッダー ファイル内):

struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id);

この構造体を指します ( Mac ブランチ C ファイル内):

struct hid_device_info  HID_API_EXPORT *hid_enumerate(unsigned short vendor_id, unsigned short product_id)
{
...
}

ここで、「...」は、「HID デバイスに関する情報を含む、タイプ struct #hid_device のリンクされたリストへのポインター」を返すことになる OS レベルのコード全体です。

ctypes やその他のツールを使用して、Python スクリプトでこのような関数を呼び出すにはどうすればよいでしょうか? このスタックオーバーフローのページが、同じ問題を解決したいと考えている他のすべての人々のガイドとして役立つことを願っています。詳細を教えてください。ありがとうございます。

4

1 に答える 1

3

これはあなたの質問に対する正確な答えではありませんが、いくつかの新しい指針を与えるかもしれません.

複雑なネイティブ ライブラリと対話する場合、「ギャップを埋める」ために C コードを記述する必要があり、ctypes だけでは解決できない場合があります。ブリッジ コードは C 構造体を Python に渡す前に簡素化し、その逆も同様です。これは、ctypes を使用してすべてのネイティブ コードを記述することができない場合があるためです。

ネイティブの Python C 拡張機能を手動で記述できますが、これはお勧めしません。

この種の状況で使用できる「ブリッジ ツールキット」またはコード ジェネレーターがいくつかあります。最も人気のあるものの 1 つは、C と Python のコードを自由に混在させることができる .pyx モジュールを作成できる Cython です。

http://cython.org/

.pyx は、結果のネイティブ C モジュールとラッピング .py モジュールにコンパイルされます。後者はアプリケーション ロジックに簡単にインポートできます。

于 2011-04-16T16:57:38.283 に答える