Platform SDK: DirectX

IDirectInputDevice7::SendDeviceData

IDirectInputDevice7::SendDeviceData メソッドは、出力を受け付けるデバイスにデータを送信する。デバイスは、取得済みの状態でなければならない。

HRESULT SendDeviceData(
  DWORD cbObjectData, 
  LPCDIDEVICEOBJECTDATA rgdod, 
  LPDWORD pdwInOut, 
  DWORD fl  
);

パラメータ

cbObjectData
単一の DIDEVICEOBJECTDATA 構造のサイズ (バイト単位)。
rgdod
デバイスに送信するデータを格納した DIDEVICEOBJECTDATA 構造体の配列。これは、*pdwInOut 要素で構成されていなければならない。

DIDEVICEOBJECTDATA 構造体 の dwOfs フィールドには、データの送信先となるデバイス オブジェクトの識別子が含まれなければならない。この識別子は、DIDEVICEOBJECTINSTANCE 構造体 の dwType フィールドから取得される。dwTimeStamp および dwSequence メンバは、ゼロでなければならない。

pdwInOut
呼び出し時は、このパラメータが指す変数には、rgdod が指す配列の要素数が含まれる。終了時は、デバイスに送信された要素数が含まれる。
fl
データの送信方法を制御するフラグ。ゼロまたは次の値を取ることができる。
DISDD_CONTINUE
送信されるデバイス データは、以前に送信されたデバイス データに上書きされる。「注意」を参照すること。

戻り値

成功すれば DI_OK を返す。

失敗すれば次のエラー値のいずれかを返す。

DIERR_INPUTLOST
DIERR_NOTACQUIRED
DIERR_REPORTFULL
DIERR_UNPLUGGED

注意

個別のデータ要素が特定の順序で送信されるという保証はない。しかし、IDirectInputDevice7::SendDeviceData の呼び出しが成功した場合、送信されたデータの間に別のデータが紛れ込むことはない。また、複数のデータが 1 回の呼び出しで同じオブジェクトに送信される場合、どのデータが送信されるかは特定されない。

たとえば、データをパケット単位で送信できるデバイスがあり、各パケットは、A および B という 2 つの情報を表すとする。ここで、アプリケーションが 3 つのデータ要素 (B = 2、A = 1、B =0) を送信しようとするとどうなるだろうか。

実際のデバイスに送信されるパケットは 1 つである。パケットの A フィールドの値は 1、そしてパケットの B フィールドの値は 2 か 0 になる。

データを指定どおりにデバイスに送信する必要がある場合は、IDirectInputDevice7::SendDeviceData を 3 回呼び出し、呼び出しごとにデータ要素を 1 つずつ送信しなければならない。

最初の呼び出しに応答して、A フィールドがブランク、B フィールドの値が 2 のパケットをデバイスに送信する。

2 回目の呼び出しでは、A フィールドの値が 1、B フィールドがブランクのパケットを送信する。

最後の 3 回目の呼び出しで、A フィールドがブランク、B フィールドの値が 0 のパケットを送信する。

DISDD_CONTINUE フラグが設定されている場合、送信されたデバイス データは以前に送信されたデバイス データに上書きされる。フラグの設定がなければ、送信されるデバイス データはまったく新しいデータとして処理される。

たとえば、Button0 および Button1 の 2 つのボタン出力をサポートするデバイスがあるとする。アプリケーションが最初に IDirectInputDevice7::SendDeviceData を呼び出して "Button0 押下" を渡すと、デバイスには、"Button0 押下、Button1 未押下" という形式のパケットが送信される。次に、アプリケーションがもう一度 SendDeviceData を呼び出して "Button1 押下" と DISDD_CONTINUE フラグを渡すと、デバイスには、"Button0 押下、Button1 押下" という形式のパケットが送信される。しかし、アプリケーションが DISDD_CONTINUE フラグを渡さなかった場合、デバイスに送信されるパケットは、"Button0 未押下 , Button1 押下" となる。

動作環境

  Windows NT/2000 :Windows 2000 が必要。
  Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
  ヘッダー : dinput.h で宣言。
  インポート ライブラリ : dinput.lib を使用。