Когда #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) в заголовочном файле dxvahd.h Microsoft становится истинным

Привет у меня есть 2 решения VC ++ «A» & «B» (VS2008) оба имеют одинаковую кодовую базу (всего несколько строк кода отличаются). Использование DXVAHD.h в обоих.

dxvahd.h — это стандартный заголовочный файл Microsoft. Если мы откроем этот заголовочный файл, мы увидим, что
«#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)«

Я вижу, что в решении VC ++ «A», приведенное выше условное выражение #if
ложно, следовательно весь заголовочный файл dxvahd становится серым & не является
даже скомпилировано !!

Принимая во внимание, что в другом решении «B» это условное #if верно, следовательно, никаких проблем & работает нормально.

Может ли кто-нибудь любезно сообщить мне, как мне решить эту проблему в решении «А», где приведенный выше #if становится серым / не компилируется. PLz, помогите мне.

Заранее спасибо.

6

Решение

Смотря на winapifamily.h, Вы можете видеть, что эти макросы используются для определения, какая у вас платформа и какие API подходят для вашей платформы.

/*
*  Windows APIs can be placed in a partition represented by one of the below bits.   The
*  WINAPI_FAMILY value determines which partitions are available to the client code.
*/

#define WINAPI_PARTITION_DESKTOP   0x00000001
#define WINAPI_PARTITION_APP       0x00000002

/*
* A family may be defined as the union of multiple families. WINAPI_FAMILY should be set
* to one of these values.
*/
#define WINAPI_FAMILY_APP          WINAPI_PARTITION_APP
#define WINAPI_FAMILY_DESKTOP_APP  (WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_APP)

/*
* A constant that specifies which code is available to the program's target runtime platform.
* By default we use the 'desktop app' family which places no restrictions on the API surface.
* To restrict the API surface to just the App API surface, define WINAPI_FAMILY to WINAPI_FAMILY_APP.
*/
#ifndef WINAPI_FAMILY
#define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
#endif

/* Macro to determine if a partition is enabled */
#define WINAPI_FAMILY_PARTITION(Partition)  ((WINAPI_FAMILY & Partition) == Partition)

/* Macro to determine if only one partition is enabled from a set */
#define WINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY & PartitionSet) == Partition)

Так что ваши WINAPI_PARTITION_DESKTOP будет установлен только в том случае, если вы работаете в семействе Desktop системы.

8

Другие решения

WINAPI_FAMILY также устанавливается в зависимости от целевой версии Windows.

Увидеть это обсуждение и связанный серия постов в блоге.

В частности, если вы не пишете «Приложение» (для> = Win 8), тогда:

Предпочитают использовать стандартные _WIN32_WINNT Windows Defines для выбора
правильный Win32 API (то есть многие Win32 API, необходимые для использования в
Приложениями Магазина Windows являются Vista (0x0600), Windows 7 (0x0601) или
Версия для Windows 8 (0x0602).

Ты можешь использовать WINVER или _WIN32_WINNT.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector