Platform SDK: DirectX

DirectInputDevice.SendDeviceData

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

object.SendDeviceData(count As Long, _
  data() As DIDEVICEOBJECTDATA, _
  flags As CONST_DESDDFLAGS) As Long

パラメータ

object
DirectInputDevice オブジェクトを表すオブジェクト式。
count
data 内の要素数。
data
デバイスに送信するデータを格納した DIDEVICEOBJECTDATA 型の配列。

DIDEVICEOBJECTDATA 型の lOfs フィールドには、データの送信先であるデバイス オブジェクトのインスタンス識別子 (データ オフセットではない) を格納しなければならない (「DirectInputDeviceObjectInstance.GetType」を参照)。lTimeStamp メンバと lSequence メンバはゼロでなければならない。

flags
データの送信方法を制御するフラグ。ゼロまたは次の値を取ることができる。
DISDD_CONTINUE
送信されるデバイス データは、以前に送信されたデバイス データに上書きされる。「注意」を参照すること。

エラー コード

失敗すればエラーが発生し、Err.Number に次のいずれかのエラー コードが設定される。

DIERR_INPUTLOST
DIERR_NOTACQUIRED
DIERR_REPORTFULL
DIERR_UNPLUGGED

注意

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

たとえば、データをパケット単位で送信できるデバイスがある。2 つの情報を記述するパケットをそれぞれ A と B とする。アプリケーションが 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 押下" となる。