次の方法で共有


ステップ 2 :DirectInput ジョイスティック デバイスの作成

ステップ 2 :DirectInput ジョイスティック デバイスの作成

Microsoft® DirectInput® オブジェクトを作成した後は、IDirectInputDevice8 インターフェイスへのポインタを取得する必要がある。このインターフェイスは、ジョイスティック関連タスクの大半で使われる。Joystick サンプルでは、コールバック関数 EnumJoysticksCallback でこのポイントを取得する。この関数は、ジョイスティックを列挙するたびに呼び出される。

次のサンプル コードは、このコールバック関数の最初の部分である。

BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE*     
                                       pdidInstance, VOID* pContext)
{
    HRESULT hr;

    // Obtain an interface to the enumerated joystick.
    hr = g_pDI->CreateDevice(pdidInstance->guidInstance,  
                                &g_pJoystick, NULL);
    if(FAILED(hr)) 
        return DIENUM_CONTINUE;

    return DIENUM_STOP;

EnumJoysticksCallback コールバック関数の引数を次に示す。

  • デバイス インスタンスへのポインタ。インスタンスは、デバイスが列挙されたときに DirectInput システムによって提供される。
  • IDirectInput8::EnumDevices に引数として指定した 32 ビット値へのポインタ。この引数には、メソッドを使えるインターフェイスへのポインタであれば、任意の 32 ビット値を指定することもできる。しかし、この例では NULL を渡している。

コールバック関数の最初のタスクは、デバイスを作成することである。IDirectInput8::CreateDevice メソッドには、パラメータはない。

最初の引数は、デバイスのインスタンスのグローバル一意識別子 (GUID) に対する参照値である。この場合、GUID は DirectInput がデバイスを列挙したときに提供する DIDEVICEINSTANCE 構造体から取得される。

第 2 引数は、呼び出しが成功した場合に、有効なインターフェイス ポインタで初期化される変数のアドレスである。

第 3 引数は、COM 集成で使う制御オブジェクトの IUnknown インターフェイスのアドレスである。Joystick サンプルは集成を使わないため、この引数の値には NULL を設定する。

デバイス インターフェイスを作成できない場合は、コールバック関数から DIENUM_CONTINUE が返ることに注意する。このフラグは、列挙対象のデバイスが存在する限り、列挙を続行することを DirectInput に指示する。

DirectInput ジョイスティック デバイスを作成したら、「ステップ 3 :ジョイスティックのデータ形式の設定」に進むこと。