Microsoft DirectX 8.0 (C++) |
出力を受け付けるデバイスにデータを送信する。デバイスは、取得済みの状態でなければならない。
HRESULT SendDeviceData( DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl );
DIDEVICEOBJECTDATA 構造体 の dwOfs フィールドには、データの送信先となるデバイス オブジェクトの識別子が含まれなければならない。この識別子は、DIDEVICEOBJECTINSTANCE 構造体 の dwType フィールドから取得される。dwTimeStamp および dwSequence メンバは、ゼロでなければならない。
成功した場合は、DI_OK を返す。
失敗した場合は、次のいずれかのエラー値を返す。
DIERR_INPUTLOST |
DIERR_NOTACQUIRED |
DIERR_REPORTFULL |
DIERR_UNPLUGGED |
個別のデータ要素が特定の順序で送信されるという保証はない。しかし、IDirectInputDevice8::SendDeviceData の呼び出しが成功した場合、送信されたデータの間に別のデータが紛れ込むことはない。また、複数のデータが 1 回の呼び出しで同じオブジェクトに送信される場合、どのデータが送信されるかは特定されない。
たとえば、データをパケット単位で送信できるデバイスがあり、各パケットは、A および B という 2 つの情報を表すとする。ここで、アプリケーションが 3 つのデータ要素 (B = 2、A = 1、B =0) を送信しようとするとどうなるだろうか。
実際のデバイスに送信されるパケットは 1 つである。パケットの A フィールドの値は 1、そしてパケットの B フィールドの値は 2 か 0 になる。
データを指定どおりにデバイスに送信する必要がある場合は、IDirectInputDevice8::SendDeviceData を 3 回呼び出し、呼び出しごとにデータ要素を 1 つずつ送信しなければならない。
最初の呼び出しに応答して、A フィールドがブランク、B フィールドの値が 2 のパケットをデバイスに送信する。
2 回目の呼び出しでは、A フィールドの値が 1、B フィールドがブランクのパケットを送信する。
最後の 3 回目の呼び出しで、A フィールドがブランク、B フィールドの値が 0 のパケットを送信する。
DISDD_CONTINUE フラグが設定されている場合、送信されたデバイス データは以前に送信されたデバイス データに上書きされる。それ以外の場合、送信されるデバイス データは、以前に送信されたデバイス データを含まない。
たとえば、Button0 および Button1 の 2 つのボタン出力をサポートするデバイスがあるとする。アプリケーションが最初に IDirectInputDevice8::SendDeviceData を呼び出して "Button0 押下" を渡すと、デバイスには、"Button0 押下、Button1 未押下" という形式のパケットが送信される。次に、アプリケーションがもう一度 SendDeviceData を呼び出して "Button1 押下" と DISDD_CONTINUE フラグを渡すと、デバイスには、"Button0 押下、Button1 押下" という形式のパケットが送信される。しかし、アプリケーションが DISDD_CONTINUE フラグを渡さなかった場合、デバイスに送信されるパケットは、"Button0 未押下 , Button1 押下" となる。
Windows NT/2000 : Windows 2000 以降に対する再配布可能ファイルとして提供。
Windows 95/98 : Windows 95 以降に対する再配布可能ファイルとして提供。
ヘッダー : dinput.h で宣言。