5

हाय मैं 2 कुलपति ++ समाधान 'ए' & 'बी' (VS2008) दोनों एक ही codebase (कोड का सिर्फ कुछ पंक्तियों से कर रहे हैं हो रहा है विभिन्न)। दोनों में DXVAHD.h का उपयोग करना।जब dxvahd.h माइक्रोसॉफ्ट हेडर फाइल सच बन में WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) #if करता

dxvahd.h एक मानक माइक्रोसॉफ्ट हैडर फ़ाइल है। अगर हम इस हेडर फाइल खोलते हैं, तो हम देखते हैं वहाँ सशर्त अगर एक "#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"

मुझे लगता है कि कुलपति ++ समाधान 'ए' में, इसके बाद के संस्करण सशर्त #if बयान झूठे, है इसलिए पूरे dxvahd हेडर फाइल & भी संकलित नहीं है !!

जबकि एक और समाधान 'बी' में, इस सशर्त #if सच है, इसलिए कोई मुद्दों & अपनी कार्यशील ठीक।

क्या कोई मुझे कृपया बता सकता है कि समाधान "ए" में इस समस्या को कैसे हल किया जाए, जिसमें उपर्युक्त #if संकलित हो रहा है/संकलित नहीं हो रहा है। पीएलजी मेरी मदद करो।

अग्रिम धन्यवाद।

उत्तर

7

winapifamily.h पर देखकर, आप देख सकते हैं कि इन मैक्रोज़ का उपयोग यह निर्धारित करने के लिए किया जाता है कि आपके पास कौन सा मंच है और आपके प्लेटफ़ॉर्म के लिए कौन सी एपीआई उपयुक्त है।

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

लेकिन दोनों समाधान "ए" और "बी" संकलित और उसी सिस्टम पर चलते हैं, एक ही ओएस, एक ही मंच। मैं वास्तव में सोच रहा हूं कि यह वीएस -2008 में कोई सेटिंग हो सकती है, जो 2 समाधानों में अंतर पैदा कर रही है। – codeLover

+0

@codeLover AFAIK यह मेट्रो ऐप्स बनाम डेस्कटॉप ऐप्स के लिए है, पिछली बार मैंने चेक किया था, मेट्रो VS2008 में समर्थित नहीं था। क्या मै गलत हु? –

+0

डेस्कटॉप Win7 पर दोनों समाधानों को चला रहा है और वे डेस्कटॉप ऐप्स दोनों हैं। – codeLover

0

WINAPI_FAMILY भी लक्षित विंडोज संस्करण के आधार पर सेट किया गया है।

this discussion और लिंक blog post series देखें।

विशेष रूप से, अगर आप (के लिए> = विन 8) एक "एप्लिकेशन" लिख नहीं कर रहे हैं तो:

पसंद करते हैं मानक _WIN32_WINNT विंडोज के उपयोग का चयन सही Win32 एपीआई के लिए परिभाषित करता है (यानी कई Win32 एपीआई विंडोज स्टोर ऐप्लिकेशन में उपयोग के लिए आवश्यक Vista (0x0600), विंडोज 7 (0x0601), या Windows 8 (0x0602) संस्करण हैं।

आप WINVER or _WIN32_WINNT उपयोग कर सकते हैं।

संबंधित मुद्दे