7

こんにちは、私は 2 つの VC++ ソリューション「A」と「B」(VS2008) を持っています。どちらも同じコードベースを持っています (コードの数行だけが異なります)。両方で DXVAHD.h を使用します。

dxvahd.h は、標準の Microsoft ヘッダー ファイルです。このヘッダー ファイルを開くと、条件付き if " #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"があることがわかります。

VC++ ソリューション「A」では、上記の条件付き #if ステートメントが false であるため、dxvahd ヘッダー ファイル全体がグレー表示され、コンパイルさえされていないことがわかります。

別のソリューション「B」では、この条件 #if が true であるため、問題はなく、正常に動作します。

ソリューション「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 Defines を使用して正しい Win32 API を選択することをお勧めします (つまり、Windows ストア アプリで使用するために必要な多くの Win32 API は、Vista (0x0600)、Windows 7 (0x0601)、または Windows 8 (0x0602) バージョンです。

WINVER または _WIN32_WINNTを使用できます。

于 2016-04-30T09:58:28.403 に答える