7

嗨,我有 2 个 VC++ 解决方案“A”和“B”(VS2008)都具有相同的代码库(只有几行代码不同)。在两者中都使用 DXVAHD.h。

dxvahd.h 是标准的 Microsoft 头文件。如果我们打开这个头文件,我们会看到有一个条件 if " #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"

我看到在 VC++ 解决方案“A”中,上面的条件 #if 语句是错误的,因此整个 dxvahd 头文件变灰并且甚至没有编译!

而在另一个解决方案“B”中,这个条件#if 为真,因此没有问题并且工作正常。

任何人都可以让我知道如何在解决方案“A”中解决此问题,其中上述#if 变灰/未编译。PLZ帮帮我。

提前致谢。

4

2 回答 2

8

查看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,只有在系统的桌面系列上运行时才会设置。

于 2013-03-08T11:02:34.470 回答
0

WINAPI_FAMILY 也根据目标 Windows 版本进行设置。

请参阅此讨论和链接的博客文章系列

特别是,如果您不是在编写“应用程序”(对于 >= Win 8),那么:

首选使用标准 _WIN32_WINNT Windows 定义来选择正确的 Win32 API(即在 Windows 应用商店应用程序中使用的许多 Win32 API 是 Vista (0x0600)、Windows 7 (0x0601) 或 Windows 8 (0x0602) 版本。

您可以使用WINVER 或 _WIN32_WINNT

于 2016-04-30T09:58:28.403 回答