次の方法で共有


定数のカスタム値の定義

カテゴリ、センサーの種類、データ フィールド、プロパティ、およびイベントのカスタム値を定義できます。

カスタム値のガイドライン

プラットフォーム定義の一連の定数が機能する場合は、新しい定数を定義しないでください。「Constants」セクションで説明されているカテゴリ、種類、データ フィールド、プロパティ、およびイベントを確認して理解し、センサー ドライバーがプラットフォーム フレームワークに適合するかどうかを判断します。

カスタム値を定義する場合は、次のガイドラインに従います。

  • 新しい GUID を生成します。プラットフォーム定義の定数から GUID を再利用しないでください。また、プラットフォーム定義のベース値に基づいて新しい GUID を生成しないでください。

  • 同じセンサー カテゴリでは、新しいセンサー データ型に同一の GUID を使用します。各データ型を一意にするには、プロパティ キーの PID 部分をインクリメントします。

  • センサーに対して定義する新しいセンサー プロパティに同一の GUID を使用します。各プロパティを一意にするには、プロパティ キーの PID 部分をインクリメントします。

  • センサーに対して定義する新しいセンサー イベントの種類に同一の GUID を使用します。各イベントの種類を一意にするには、プロパティ キーの PID 部分をインクリメントします。

  • 一意の定数を作成します。定数名の競合を回避するために、センサー コード内およびその他の実装全体にわたり、各カスタム名をその名前が一意になるような値で始めます。たとえば、Fabrikam という名前の企業の場合、各定数の定義を FABRIKAM_ で始めます。

  • 値を文書化して公開します。開発者が Windows Sensor API または Location API を介してセンサーからデータにアクセスできるようにするには、ヘッダー ファイルを提供するなどの方法で、カスタム値を文書化し、定数を公開する必要があります。センサーが専用システムの一部である場合、カスタム値を公開する必要はありません。

次のコード例では、センサー定数のカスタム値を定義する方法を示します。この例では、現在のローカル時刻を提供するサンプル センサーの新しいカテゴリ、センサーの種類、およびデータ型を作成します。衛星または他の無線伝送を介して、基準クロックから時刻情報を受信するセンサーを想像できます。

  // Define a sensor ID.
// {0D77BEE3-7169-42bf-8379-28F9A9B59A57}
DEFINE_GUID(SAMPLE_SENSOR_TIME_ID, 
0xd77bee3, 0x7169, 0x42bf, 0x83, 0x79, 0x28, 0xf9, 0xa9, 0xb5, 0x9a, 0x57);

// Define a custom category.
// {062A5C3B-44C1-4ad1-8EFC-0F65B2E4AD48}
DEFINE_GUID(SAMPLE_SENSOR_CATEGORY_DATE_TIME, 
0x62a5c3b, 0x44c1, 0x4ad1, 0x8e, 0xfc, 0xf, 0x65, 0xb2, 0xe4, 0xad, 0x48);

// Define a custom type.
// {5F199A84-409F-4e35-B2DD-F9C79F5318A0}
DEFINE_GUID(SAMPLE_SENSOR_TYPE_TIME, 
0x5f199a84, 0x409f, 0x4e35, 0xb2, 0xdd, 0xf9, 0xc7, 0x9f, 0x53, 0x18, 0xa0);

// Time/Date sensor fields.
// Because these are related, each field uses the same GUID, but changes the PID.
// {340946F2-9A77-42b0-8176-57D4DF00E5CA}
DEFINE_PROPERTYKEY(SAMPLE_SENSOR_DATA_TYPE_HOUR, 
0x340946f2, 0x9a77, 0x42b0, 0x81, 0x76, 0x57, 0xd4, 0xdf, 0x0, 0xe5, 0xca, PID_FIRST_USABLE); // PID = 2

DEFINE_PROPERTYKEY(SAMPLE_SENSOR_DATA_TYPE_MINUTE, 
0x340946f2, 0x9a77, 0x42b0, 0x81, 0x76, 0x57, 0xd4, 0xdf, 0x0, 0xe5, 0xca, PID_FIRST_USABLE + 1); // PID = 3

DEFINE_PROPERTYKEY(SAMPLE_SENSOR_DATA_TYPE_SECOND, 
0x340946f2, 0x9a77, 0x42b0, 0x81, 0x76, 0x57, 0xd4, 0xdf, 0x0, 0xe5, 0xca, PID_FIRST_USABLE + 2); // PID = 4 

DEFINE_PROPERTYKEY マクロの使用

DEFINE_PROPERTYKEY マクロを使用するには、次の 2 つのオプションのいずれかを使用します。

  • プロジェクトに Initguid.h をインクルードします。この場合、マクロはプロパティ キーを定義します。ほとんどの場合、この方法は機能しますが、大規模で複雑なプロジェクトでは名前の競合が発生する可能性があります。

  • Initguid.h をインクルードしません。代わりに、.lib ファイル名拡張子を持つ静的ライブラリ ファイルに定義をコンパイルします。この場合、マクロはコンパイラのプロパティ キーの名前を宣言しますが、ユーザーがリンカー設定で .lib ファイルを参照する必要はありません。この方法は、複数のモジュールを使用する大規模なプロジェクトに最適です。

Initguid.h をインクルードせず、ライブラリ ファイルを参照せずにマクロを使用すると、LNK2001 エラーが発生します。