5

嗨,我有2個VC++解決方案「A」&「B」(VS2008)都有相同的代碼庫(只有幾行代碼不同)。兩者都使用DXVAHD.h。什麼時候在dxvahd.h中執行#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)微軟頭文件變爲真

dxvahd.h是一個標準的Microsoft頭文件。如果我們打開這個頭文件中,我們可以看到有一個條件,如果 「#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)

我看到,在VC++解決方案「A」,上述條件#如果聲明 是假的,因此整個dxvahd頭文件變灰&不是 偶編!

鑑於在另一個解決方案「B」中,此條件#if爲真,因此沒有問題&其工作正常。

任何人都可以好心讓我知道如何解決這個問題的解決方案「A」,其中上述#if變灰/不編譯。 PLz幫助我。

在此先感謝。

回答

7

看着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如果您是在桌面家庭系統的運行將只設置。

+0

但是,解決方案「A」和「B」在相同系統,相同操作系統,相同平臺上編譯和運行。我真的想知道它是否可以是VS2008中的任何設置,這導致了兩種解決方案的差異。 – codeLover 2013-03-08 11:08:16

+0

@codeLover AFAIK這是用於Metro應用程序和桌面應用程序,上次我查看時,Metro在VS2008中不受支持。我錯了嗎? – 2013-03-08 11:09:26

+0

在桌面Win7上運行這兩個解決方案,它們都是桌面應用程序。 – codeLover 2013-03-08 11:31:59

0

WINAPI_FAMILY也根據目標Windows版本進行設置。

請參閱this discussion和鏈接的blog post series

特別是,如果你不寫一個「應用程序」(時間> =運8),則:

不想使用標準的Windows _WIN32_WINNT的定義選擇 正確的Win32 API(即多在 Windows應用商店中的應用程序需使用Win32 API的是Vista的(爲0x0600),Windows 7中(0x0601),或 的Windows 8(0x0602)版本。

可以使用WINVER or _WIN32_WINNT

相關問題