Microsoft DirectX 8.0 (Visual Basic) |
出力を受け付けるデバイスにデータを送信する。デバイスは、取得済みの状態でなければならない。
object.SendDeviceData(count As Long, _ data() As DIDEVICEOBJECTDATA, _ flags As CONST_DESDDFLAGS) As Long
DIDEVICEOBJECTDATA 型の lOfs フィールドには、データの送信先であるデバイス オブジェクトのインスタンス識別子 (データ オフセットではない) を格納しなければならない (「DirectInputDeviceObjectInstance.GetType」を参照)。lTimeStamp メンバと lSequence メンバはゼロでなければならない。
失敗した場合はエラーが発生し、Err.Number に次のいずれかのエラー コードが設定される。
DIERR_INPUTLOST |
DIERR_NOTACQUIRED |
DIERR_REPORTFULL |
DIERR_UNPLUGGED |
個別のデータ要素が特定の順序で送信されるという保証はない。しかし、SendDeviceData の呼び出しが成功した場合、送信されたデータの間に別のデータが紛れ込むことはない。さらに、複数のデータが 1 回の呼び出しで同じオブジェクトに送信される場合、どのデータが送信されるかは特定されない。
たとえば、データをパケット単位で送信できるデバイスがあり、各パケットは、A および B という 2 つの情報を表すとする。ここで、アプリケーションが 3 つのデータ要素 (B = 2、A = 1、B =0) を送信しようとするとどうなるだろうか。
実際のデバイスに送信されるパケットは、1 つである。パケットの A フィールドの値は 1、そしてパケットの B フィールドの値は 2 か 0 になる。
データを指定どおりにデバイスに送信しなければならない場合は、SendDeviceData を 3 回呼び出し、呼び出しごとにデータ要素を 1 つずつ送信しなければならない。
最初の呼び出しに応答して、A フィールドがブランク、B フィールドの値が 2 のパケットをデバイスに送信する。
2 回目の呼び出しでは、A フィールドの値が 1、B フィールドがブランクのパケットを送信する。
最後の 3 回目の呼び出しで、A フィールドがブランク、B フィールドの値が 0 のパケットを送信する。
DISDD_CONTINUE が設定されている場合、送信されたデバイス データは以前に送信されたデバイス データに上書きされる。フラグの設定がなければ、送信されるデバイス データはまったく新しいものとして処理される。
たとえば、Button0 および Button1 の 2 つのボタン出力をサポートするデバイスがあるとする。アプリケーションが最初に SendDeviceData を呼び出して "Button0 押下" を渡すと、デバイスには、"Button0 押下、Button1 未押下" という形式のパケットが送信される。次に、アプリケーションがもう一度 SendDeviceData を呼び出して "Button1 押下" と DISDD_CONTINUE フラグを渡すと、デバイスには、"Button0 押下、Button1 押下" という形式のパケットが送信される。しかし、アプリケーションが DISDD_CONTINUE フラグを渡さなかった場合、デバイスに送信されるパケットは、"Button0 未押下、Button1 押下" となる。