When does #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) in dxvahd.h Microsoft header file become true

前端 未结 2 735
没有蜡笔的小新
没有蜡笔的小新 2021-01-05 07:03

Hi I am having 2 VC++ solutions \"A\" & \"B\" (VS2008) both are having the same codebase (with just few lines of code different). Using DXVAHD.h in both.

dxvahd.

相关标签:
2条回答
  • 2021-01-05 07:14

    Looking at winapifamily.h, you can see that these macros are used to determine what platform you have and what API's are suitable for your platform.

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

    So your WINAPI_PARTITION_DESKTOP would only be set if you are running on a Desktop family of the the system.

    0 讨论(0)
  • 2021-01-05 07:18

    WINAPI_FAMILY is also set depending on the targeted Windows version.

    See this discussion and the linked blog post series.

    In particular, if you're not writing an "App" (for >= Win 8) then:

    Prefer use of the standard _WIN32_WINNT Windows Defines for selecting the correct Win32 API (i.e. many Win32 APIs required for use in Windows Store apps are the Vista (0x0600), Windows 7 (0x0601), or Windows 8 (0x0602) version.

    You can use WINVER or _WIN32_WINNT.

    0 讨论(0)
提交回复
热议问题