Platform SDK: DirectX |
IDirectInputDevice7::GetDeviceData メソッドは、デバイスからバッファリング データを取得する。
HRESULT GetDeviceData( DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags );
成功すれば DI_OK または DI_BUFFEROVERFLOW、
失敗すれば次のエラー値のいずれかを返す。
DIERR_INPUTLOST |
DIERR_INVALIDPARAM |
DIERR_NOTACQUIRED |
DIERR_NOTBUFFERED |
DIERR_NOTINITIALIZED |
デバイス データを取得する前に、IDirectInputDevice7::SetDataFormat メソッドでデータ形式を設定し、IDirectInputDevice7::SetProperty メソッドでバッファ サイズを設定し、続いて IDirectInputDevice7::Acquire メソッドでデバイスを取得しなければならない。
以下の例では、バッファリング データ要素を最高 10 個まで読み取る。デバイス バッファからは、データを読み取りながら削除している。
DIDEVICEOBJECTDATA rgdod[10]; DWORD dwItems = 10; hres = IDirectInputDevice7_GetDeviceData( pdid, sizeof(DIDEVICEOBJECTDATA), rgdod, &dwItems, 0); if (SUCCEEDED(hres)) { // dwItems = 読み取られた要素数 (0 になる)。 if (hres == DI_BUFFEROVERFLOW) { // バッファがオーバーフローした。 } }
バッファをフラッシュして、フラッシュした項目の数を取得するには、rgdod パラメータに NULL、pdwInOut パラメータに INFINITE を含む変数へのポインタをそれぞれ指定する。以下の例で、その方法を示す。
dwItems = INFINITE; hres = IDirectInputDevice7_GetDeviceData( pdid, sizeof(DIDEVICEOBJECTDATA), NULL, &dwItems, 0); if (SUCCEEDED(hres)) { // バッファのフラッシュに成功。 // dwItems = フラッシュした要素数。 if (hres == DI_BUFFEROVERFLOW) { // バッファがオーバーフローした。 } }
デバイス バッファ中の要素数を調べるには、rgdod パラメータに NULL、pdwInOut パラメータに INFINITE、dwFlags に DIGDD_PEEK をそれぞれ指定する。以下の例で、その方法を示す。
dwItems = INFINITE; hres = IDirectInputDevice7_GetDeviceData( pdid, sizeof(DIDEVICEOBJECTDATA), NULL, &dwItems, DIGDD_PEEK); if (SUCCEEDED(hres)) { // dwItems = バッファ内の要素数。 if (hres == DI_BUFFEROVERFLOW) { // バッファ オーバーフローが発生。一部のデータ // のキャプチャに失敗した。 } }
バッファ オーバーフローが発生したかどうかを調べるには、rgdod パラメータに NULL、pdwInOut パラメータにゼロを設定する。以下の例で、その方法を示す。
dwItems = 0; hres = IDirectInputDevice7_GetDeviceData( pdid, sizeof(DIDEVICEOBJECTDATA), NULL, &dwItems, 0); if (hres == DI_BUFFEROVERFLOW) { // バッファ オーバーフローが発生。 }
Windows NT/2000 :Windows 2000 が必要。
Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
ヘッダー : dinput.h で宣言。
インポート ライブラリ : dinput.lib を使用。