Freigeben über


Definieren benutzerdefinierter Werte für Sensorkonstanten (vorherige Version)

Sie können benutzerdefinierte Werte für Kategorien, Sensortypen, Datenfelder, Eigenschaften und Ereignisse definieren.

Richtlinien für benutzerdefinierte Werte

Vermeiden Sie das Definieren neuer Konstanten, wenn ein Satz plattformdefinierter Konstanten funktioniert. Untersuchen und verstehen Sie die Kategorien, Typen, Datenfelder, Eigenschaften und Ereignisse, die im Abschnitt Konstantenreferenz beschrieben werden, und entscheiden Sie, ob Ihr Sensortreiber in das Plattformframework passt.

Wenn Sie benutzerdefinierte Werte definieren möchten, befolgen Sie die folgenden Richtlinien:

  • Generieren Sie neue PROPERTYKEYs. Verwenden Sie keine GUIDs aus plattformdefinierte Konstanten wieder und basieren Ihre neuen GUIDs nicht auf plattformdefinierte Basiswerte.

  • Verwenden Sie identische GUIDs für neue Sensordatentypen in derselben Sensorkategorie. Um jeden Datentyp eindeutig zu machen, erhöhen Sie den PID-Teil des Eigenschaftenschlüssels.

  • Verwenden Sie identische GUIDs für neue Sensoreigenschaften, die Sie für Ihren Sensor definieren. Um jede Eigenschaft eindeutig zu machen, erhöhen Sie den PID-Teil des Eigenschaftenschlüssels.

  • Verwenden Sie identische GUIDs für den neuen Sensorereignistyp, den Sie für Ihren Sensor definieren. Um jeden Ereignistyp eindeutig zu machen, erhöhen Sie den PID-Teil des Eigenschaftenschlüssels.

  • Erstellen Sie eindeutige Konstanten. Um Konflikte zwischen Konstantennamen zu vermeiden, beginnen Sie jeden benutzerdefinierten Namen mit einem Wert, der den Namen sowohl innerhalb des Sensorcodes als auch in anderen Implementierungen eindeutig macht. Beispielsweise könnte ein Unternehmen mit dem Namen Fabrikam jede Konstantedefinition mit FABRIKAM_beginnen.

  • Dokumentieren und veröffentlichen Sie die Werte. Wenn Sie möchten, dass Entwickler über die Windows-Sensor-API oder Standort-API auf die Daten von Ihrem Sensor zugreifen können, müssen Sie Ihre benutzerdefinierten Werte dokumentieren und die Konstanten veröffentlichen, z. B. durch Bereitstellen einer Headerdatei. Wenn Ihr Sensor Teil eines proprietären Systems ist, ist die Veröffentlichung der benutzerdefinierten Werte nicht erforderlich.

Beispiel

Das folgende Codebeispiel zeigt, wie benutzerdefinierte Werte für Sensorkonstanten definiert werden. Im Beispiel wird eine neue Kategorie, ein Sensortyp und ein neuer Datentyp für einen Beispielsensor erstellt, der die aktuelle Ortszeit bereitstellt. Sie können sich vorstellen, dass ein solcher Sensor Zeitinformationen von einer Referenzuhr über Satellit oder andere Funkübertragungen empfängt.

// 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

Verwenden des DEFINE_PROPERTYKEY-Makros

Verwenden Sie eine der beiden folgenden Optionen, um das makro DEFINE_PROPERTYKEY zu verwenden:

  • Schließen Sie Initguid.h in Ihr Projekt ein. In diesem Fall definiert das Makro den Eigenschaftenschlüssel für Sie. Dieser Ansatz funktioniert in den meisten Fällen, kann aber in großen, komplexen Projekten zu Benennungskonflikten führen.

  • Schließen Sie Initguid.h nicht ein. Kompilieren Sie Stattdessen Ihre Definitionen in eine statische Bibliotheksdatei mit der Dateinamenerweiterung .lib. In diesem Fall deklariert das Makro die Namen ihrer Eigenschaftenschlüssel für den Compiler. Sie müssen jedoch in Ihren Linkereinstellungen auf die LIB-Datei verweisen. Dieser Ansatz funktioniert am besten in großen Projekten, die mehrere Module verwenden.

Die Verwendung des Makros ohne Initguid.h und ohne Verweis auf eine Bibliotheksdatei verursacht den LNK2001 Fehler.