Поделиться через


макрос DEFINE_PROPERTYKEY (propkeydef.h)

Используется для упаковки идентификатора формата (FMTID) и идентификатора свойства (PID) в структуру PROPERTYKEY , представляющую ключ свойства.

Синтаксис

void DEFINE_PROPERTYKEY(
   name,
   l,
   w1,
   w2,
   b1,
   b2,
   b3,
   b4,
   b5,
   b6,
   b7,
   b8,
   pid
);

Параметры

name

Имя структуры PROPERTYKEY , представляющей ключ свойства.

l

Значение элемента Data1 элемента fmtid структуры PROPERTYKEY .

w1

Значение элемента Data2 элемента fmtid структуры PROPERTYKEY .

w2

Значение элемента Data3 элемента fmtid структуры PROPERTYKEY .

b1

Значение элемента Data4[0] элемента fmtid структуры PROPERTYKEY .

b2

Значение элемента Data4[1] элемента fmtid структуры PROPERTYKEY .

b3

Значение элемента Data4[2] элемента fmtid структуры PROPERTYKEY .

b4

Значение элемента Data4[3] элемента fmtid структуры PROPERTYKEY .

b5

Значение элемента Data4[4] элемента fmtid структуры PROPERTYKEY .

b6

Значение элемента Data4[5] элемента fmtid структуры PROPERTYKEY .

b7

Значение элемента Data4[6] элемента fmtid структуры PROPERTYKEY .

b8

Значение элемента Data4[7] элемента fmtid структуры PROPERTYKEY .

pid

Идентификатор свойства (PID). Рекомендуется задать для этого значения значение PID_FIRST_USABLE. Допустимо любое значение, большее или равное 2.

Примечание Значения 0 и 1 зарезервированы и не должны использоваться.
 

Возвращаемое значение

None

Remarks

Макрос DEFINE_PROPERTYKEY определяется следующим образом.

#ifdef INITGUID
#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name = \
{ { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
#else
#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \ 
EXTERN_C const PROPERTYKEY name
#endif // INITGUID 

При использовании этого макроса у вас есть два варианта:

  • Включите Initguid.h в проект. В этом случае макрос объявляет имена ключей свойств и определяет ключи свойств. Этот подход работает в большинстве случаев, но может привести к конфликтам именования в крупных, сложных проектах.
  • Не включайте Initguid.h. Вместо этого скомпилируйте определения в файл статической библиотеки с расширением .lib. В этом случае макрос объявляет имена ключей свойств для использования компилятором, но необходимо ссылаться на LIB-файл в параметрах компоновщика для проекта. Этот подход лучше всего подходит для больших проектов, использующих несколько модулей, так как он позволяет избежать конфликтов имен, упомянутых в варианте 1.
Использование макроса без включения Initguid.h и без ссылки на файл библиотеки вызывает ошибку компоновщика LNK2001.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header propkeydef.h