なので、DirectInputでゲームコントローラの処理を書きました。
基本的にC++と同様にやれば動くので
例によって詳細はどこか他サイトを参照してください。
ここではDから使うときのポイントだけ書いておこうと思います。
DirectInputは複数のゲームコントローラを認識出来ますので、
最初にデバイスを列挙することになります。
このとき、IDirectInput8.EnumDevicesを使いますが、
引数の関数ポインタで指定する関数は当然DirectInputから呼ばれますので、定義時に注意が必要です。
具体的にはextern(Windows)を指定します。
1 | extern (Windows) |
---|---|
2 | static |
3 | BOOL enumerateDeviceCallback(const(DIDEVICEINSTANCE)* device, VOID* context) |
4 | { |
5 | // なにがしかの処理 |
6 | } |
軸の列挙に使用するIDirectInputDevice8.EnumObjectsに指定する関数も同様です。
ちなみに、キーボードいっぱい刺さってたらどうなるんだろう?と思い調べたところ、
全部のキーボードを1つのキーボードとして認識するそうです。(マウスも)
DirectInput の使用方法(MSDN)