次の方法で共有


プログラミングのヒントおよびツール

プログラミングのヒントおよびツール

このトピックでは、以下の特殊なプログラミングのヒントを記載する。

  • 前バージョンの DirectInput 用の設計
  • デバッグ時の応答遅延の防止
  • 重複したレジストリ キーの防止
  • Force Editor
  • GetDeviceData と取得されていないデバイス

前バージョンの DirectInput 用の設計

DirectInput8CreateIDirectInput8::InitializeIDirectInputDevice8::InitializeIDirectInputEffect::Initialize の各メソッドでは、Microsoft® DirectInput® のバージョン番号を渡す必要がある。このパラメータは、DirectInput サブシステムがどのバージョンの Microsoft DirectX® をエミュレートするかを指定する。

最新バージョンの DirectInput 用に設計されたアプリケーションは、Dinput.h で定義されている DIRECTINPUT_VERSION 値を渡す必要がある。

以前のバージョンで実行するように設計されたアプリケーションでは、設計対象の DirectInput のバージョンに対応した値、つまり上位バイトにメイン バージョン番号を付けた値を渡す必要がある。たとえば、DirectInput 3.0 上で動作するように設計されたアプリケーションは、0x0300 を渡す必要がある。

Dinput.h ヘッダー ファイルをインクルードする前に、DIRECTINPUT_VERSION を 0x0300 と定義すると、このヘッダー ファイルは DirectInput 3.0 と互換性を持つ構造体定義を生成する。

Dinput.h ヘッダー ファイルをインクルードする前に DIRECTINPUT_VERSION を定義しないと、Dinput.h ヘッダー ファイルは DirectInput の現行バージョンと互換性のある構造体定義を生成する。しかし、DirectX 3 と互換性のある構造体も、その名前に "_DX3" を付ければ使える。たとえば、DirectX 3 と互換性のある DIDEVCAPS 構造体は DIDEVCAPS_DX3 のような名前を付けられる。

また、DirectInput インターフェイスと DirectInputDevice インターフェイスの適切なバージョンを使う必要がある。DirectX 7.0 より前のバージョンの DirectX では、IDirectInput と、IDirectInputDevice または IDirectInputDevice2 のいずれかを使う必要がある。後者は DirectX 5.0 以降のバージョンで利用可能である。

デバッグ時の応答遅延の防止

Microsoft Windows® 2000 上で実行する DirectInput でキーボードまたはマウスを使う場合、デバッグ セッション中にコードを実行すると、短期間の遅延が発生する場合がある。この現象はデバック モードでのみ発生する。実際のアプリケーションでは発生しない。ただし、Emulation 値を次のレジストリ キーに追加することで、デバック モードでもこの遅延が発生しないようにできる。

HKEY_LOCAL_MACHINE
    SOFTWARE
        Microsoft
            DirectInput
名前 タイプ データ
Emulation DWORD 0x08 (キーボード用)

0x10 (マウス用)

0x18 (マウスおよびキーボード用)

次の手順に従って、DirectX コントロール パネルから、列挙を使うように切り替えることもできる。

  1. Windows コントロール パネルを開く。
  2. DirectX コントロール パネルを開く。Windows XP を使っている場合、DirectX アイコンを表示するには、[クラシック表示に切り替える] をクリックしなければならないこともある。
  3. [DirectInput] タブを選択する。
  4. [Debug Input Device Emulation] の [Emulate Keyboard] および [Emulate Mouse] チェック ボックスをオンにする。

これらの値を設定すると、DirectInput がデータを返す方法を変更することなく、遅延に影響されないエミュレーション モードを起動できる。これらの設定はグローバルであり、すべての DirectInput クライアントに影響する。パフォーマンスが向上するのは、デバッグ バイナリを使う場合のみであり、その対象となるのはフォアグラウンドの排他デバイス アクセスを使うアプリケーションのみである。デバイスの列挙中は、Windows キーのマスキングなど、一部の機能は利用できないので、列挙はデバッグの目的のみに推奨する。

   以前のバージョンの DirectX を使用中の場合は、正しいデバッグ ダイナミック リンク ライブラリ (DLL) をコンピュータにインストールするためには、SDK インストール時にデバッグを指定する必要がある。

重複したレジストリ キーの防止

DirectInput 8.0 以降を使うアプリケーションごとに、DirectInput は次のレジストリにキーを作成する。

HKEY_CURRENT_USER
    SOFTWARE
        Microsoft
            DirectInput

これにより、独立したハードウェア ベンダ (IHV) は特定のアプリケーションで独自のデバイス マッピングを無効にできる。しかし、各ビルドは、デバッグ中にタイム スタンプとファイル サイズが含まれた新しいキーを生成する。レジストリで複数のキーが生成されないようにするには、バイナリ値 AppldFlag を使う。

次の表は、AppldFlag で使用可能な値を示している。

1 キーを生成するときにタイム スタンプは無視される。
2 キーを生成するときにファイル サイズは無視される。
3 キーを生成するときにタイム スタンプとファイル サイズの両方が無視される。

AppldFlag を 3 に設定すると、ファイル名が同じであるアプリケーションのすべてのビルドは、同じキーを使う。

  AppldFlag 値はテスト コンピュータのみに設定し、同じファイル名で出荷される 2 つのアプリケーションがお互いの入力コントロール マッピングを妨害しないようにする必要がある。

Force Editor

Force Editor には、次のような特徴がある。

説明

Force Editor アプリケーションを使うと、フォース フィードバック エフェクトをデザインしたり、そのエフェクトを単独でテストしたり、いくつかのエフェクトを組み合わせてテストしたりできる。エフェクトは、ファイルに保存して、DirectInput アプリケーションにロードさせることができる。

パス

実行可能ファイル :(SDK ルート)\Bin\Dxutils\Fedit.exe

ユーザーズ ガイド

Force Editor には専用のドキュメントが添付している。Fedit.exe を起動し、F1 キーを押すとオンライン ヘルプを参照できる。次のファイルをダブルクリックして、オンライン ヘルプを直接起動することもできる。

(SDK ルート)\Bin\Dxutils\Fedit.chm

GetDeviceData と取得されていないデバイス

Microsoft DirectPlay® のデバッグ バージョンを使う場合、デバイスが取得されていないときに、IDirectInputDevice8::GetDeviceData メソッドの動作が異常になることがある。IDirectInputDevice8::GetDeviceData を呼び出したときデバイスが取得されてない場合、デバイス データ バッファにはランダム バイトが置かれ、pdwInOut パラメータの値は変更されない。そのため、アプリケーションが DPNERR_UNACQUIRED エラー コードをチェックしない場合、アプリケーションは、バッファにデータがあると誤って判断することになる。