2016-04-25 13 views
7

पुराने दिनों में जब विजुअल स्टूडियो में विंडोज़ पर सी ++ प्रोजेक्ट विकसित किया जाता है, तो आपके विजुअल स्टूडियो संस्करण में सी और सी ++ पुस्तकालयों का अपना संस्करण होगा, और आपकी परियोजना विंडोज़ एसडीके के एक विशिष्ट संस्करण को हेडर तक पहुंचने के लिए संदर्भित करेगी Win32 मंच तक पहुंच के लिए। यदि आपके पास विंडोज़ एसडीके के कई संस्करण स्थापित हैं, तो एक जटिल प्रणाली थी जिसमें पर्यावरण चर शामिल थे जो आपको यह चुनने में सक्षम बनाता था कि विंडोज एसडीके विजुअल स्टूडियो का कौन सा संस्करण डिफ़ॉल्ट रूप से उपयोग करेगा।विंडोज किट क्या हैं और वे कैसे काम करते हैं?

यह बहुत अच्छा नहीं था, और इसे ठीक से काम करने के लिए इसे थोड़ा खोदने की आवश्यकता थी, लेकिन यह सिर्फ काम के बारे में था।

बस VS2012 से VS2015 तक अपग्रेड किया गया और ऐसा लगता है कि जो भी इस प्रणाली को प्रतिस्थापित किया गया है वह या तो टूटा हुआ है, या मैं इसे समझ नहीं रहा हूं।

  1. एक सरल VS2012 सी ++ सांत्वना अनुप्रयोग शामिल है कि VS2015 को conio.h टूट जाता है के साथ कोई त्रुटि सूचना दी अपग्रेड किए जा रहे। क्यूं कर? conio.h अब विजुअल स्टूडियो सी/सी ++ पुस्तकालयों में नहीं है और इसके बजाय अब विंडोज किट 10 में रहता है, प्रोजेक्ट को अपग्रेड करने से एसडीके का उपयोग नहीं किया जाता है (जैसा कि आप उम्मीद करेंगे)।

  2. वीएस2015 में एक नया नया हैलो वर्ल्ड सी ++ ऐप बनाना सी ++ प्रोजेक्ट में निर्देशिकाएं $ (VC_IncludePath) और $ (WindowsSDK_IncludePath) प्राप्त करती हैं। $ (WindowsSDK_IncludePath) सी: \ प्रोग्राम फ़ाइलें (x86) \ Windows किट्स \ 8.1 से हेडर में खींचता है जबकि $ (VC_IncludePath) सी: \ प्रोग्राम फ़ाइलें (x86) \ Windows किट \ 10 से शीर्षलेख में खींचता है।

इतनी सरल परियोजना उन्नयन अपग्रेड पर कोई त्रुटि रिपोर्ट के साथ विफल हो गई। स्वच्छ नई कंसोल परियोजनाएं एक साथ 2 अलग-अलग विंडोज किट इंस्टॉलेशन से हेडर खींचती हैं, और अब मेरे पास 8.1 और 10 के लिए C: \ Program Files (x86) \ Microsoft SDKs और C: \ Program Files (x86) \ Windows किट्स के अंतर्गत प्रविष्टियां हैं। विंडोज किट 8.1 में Win32 और WinRt हेडर शामिल हैं, जबकि विंडोज किट 10 में सी/सी ++ हेडर शामिल हैं।

क्या मेरे पास गलत कॉन्फ़िगर किया गया है और दूषित इंस्टॉल है या यह गड़बड़ है कि यह कैसा होना चाहिए?

यदि यह गड़बड़ यह माना जाता है कि यह कैसे काम करना है? मैंने विंडोज किट्स के बारे में जानकारी के लिए एमएसडीएन खोजने की कोशिश की है लेकिन विंडोज चालक किट के बारे में सामान को छोड़कर कुछ भी नहीं बदला है, जो कुछ पूरी तरह से अलग होता था लेकिन मुझे नहीं पता कि यह अभी भी है या नहीं।

क्या वहां कोई दस्तावेज है जो मैंने याद किया है जो इस लाइब्रेरी कॉन्फ़िगरेशन के पीछे तर्क को बताता है और इसका उपयोग कैसे किया जाता है?

+3

माइक्रोसॉफ्ट के पास बहुत मुश्किल और मांग करने वाला ग्राहक है। इसका नाम माइक्रोसॉफ्ट है। राजनीति उबाऊ है और किसी की समस्या का समाधान नहीं करती है। आपको केवल परियोजना> गुण> वीसी ++ निर्देशिकाएं> निर्देशिकाएं शामिल करने की आवश्यकता है। इसे $ (VC_IncludePath) में पुनर्स्थापित करें; $ (WindowsSDK_IncludePath) जो 5 निर्देशिकाओं का मूल्यांकन करता है। यह शायद आपकी प्रोजेक्ट को तोड़ता है, सी/सी ++> सामान्य> अतिरिक्त निर्देशिका निर्देशिका सेटिंग को इसके बजाय उपयोग करें। –

+0

मुझे खेद है, लेकिन मुझे यह समझने में कठिनाई हो रही है कि इसका कौन सा हिस्सा हल करने की आवश्यकता है और आप किस समस्या के बारे में शिकायत कर रहे हैं। यदि आप कोड का एक सरल नमूना प्रदान करने में सक्षम हैं तो इससे शायद मदद मिलेगी। – user34660

+0

मैं यह समझने की कोशिश कर रहा हूं कि विंडोज किट पुराने विंडोज एसडीके से कैसे संबंधित हैं और कैसे विभिन्न परियोजनाओं के साथ काम करने के लिए परियोजनाओं को कॉन्फ़िगर करने की उम्मीद है। यह एक विजुअल स्टूडियो प्रोजेक्ट कॉन्फ़िगरेशन प्रश्न है, कोड कोड नहीं। यदि आप समझ में नहीं आते हैं या रुचि नहीं रखते हैं, लेकिन कृपया मेरे प्रश्न को बंद करने के लिए वोट न दें क्योंकि आपकी दिलचस्पी नहीं है, क्योंकि यदि कोई अच्छा जवाब बदल जाता है जो अभी भी अन्य लोगों के लिए बहुत उपयोगी हो सकता है। – Neutrino

उत्तर

2

मैंने कुछ बार इस मुद्दे के कई अलग-अलग बदलावों में शामिल हो गए हैं, वीएस2012 से वीएस2015 तक अपग्रेड की गई परियोजनाओं पर हेडर फाइलों और लाइब्रेरी निर्भरताओं दोनों को हल करने के मुद्दों के साथ।

मेरे प्रश्न के उत्तर में हंस की टिप्पणी वास्तव में शीर्षकों के लिए समस्या को ठीक करती है, लेकिन लाइब्रेरी निर्भरताओं के लिए एक ही समस्या का सामना करने के बाद मेरे पास एक आसान समाधान हो सकता है जो असफल लाइब्रेरी निर्भरता संकल्प के लिए भी काम करता है।

वीएस2015 में एक वीएस2012 प्रोजेक्ट खोलने पर कोई स्वचालित अपग्रेड नहीं किया जाता है। प्रोजेक्ट गुणों को खोलना और सामान्य -> ​​प्लेटफार्म टूलसेट को विजुअल स्टूडियो 2015 (v140) में बदलना संभवतः मेरे मूल प्रश्न या एक अलग लाइब्रेरी निर्भरता रिज़ॉल्यूशन त्रुटि में वर्णित हेडर रिज़ॉल्यूशन त्रुटि का एक संस्करण पुन: पेश करेगा।

इन्हें ठीक करने के लिए मुझे सबसे आसान तरीका प्रोजेक्ट गुणों को खोलना है और वीसी ++ निर्देशिकाओं -> निर्देशिकाएं शामिल करना है।किसी भी पथ में आपने अपने प्रोजेक्ट में खुद को जोड़ा हो सकता है, आपको शायद $ (VCInstallDir) \ include; $ (VCInstallDir \ atlmfc \ include; $ (WindowsSDK_IncludePath)

ड्रॉपडाउन प्रदर्शित करने के लिए पथ पर क्लिक करें और संपादित करें पर क्लिक करें, यह शीर्ष से नीचे, स्पष्ट रूप से परिभाषित पथ, मूल्यांकन पथ और विरासत पथ से तीन खंडों के साथ एक संवाद प्रदर्शित करेगा। बहुत नीचे एक चेकबॉक्स 'माता-पिता या परियोजना डिफ़ॉल्ट से विरासत' है जिसे मैंने हमेशा शुरू में अनचेक किया है।

स्पष्ट रूप से परिभाषित शामिल रास्तों $ (VCInstallDir) को हटा से \ में शामिल हैं, $ (VCInstallDir \ atlmfc \ शामिल हैं;। $ (WindowsSDK_IncludePath) ऊपर वर्णित प्रविष्टियों और सेटिंग 'माता-पिता या परियोजना चूक से विरासत' का चयन करें कि समाधान हो जाना चाहिए कोई हेडर फ़ाइल निर्भरता मुद्दों ।

यदि आपके पास लाइब्रेरी संदर्भ प्रविष्टियां भी हैं, तो लाइब्रेरी निर्देशिका प्रविष्टियों के साथ एक ही चीज़ होती है, सेटिंग्स संपादित करें, स्पष्ट plaform प्रविष्टियों को हटाएं और 'पैरेंट या प्रोजेक्ट डिफ़ॉल्ट से विरासत' चुनें। (यदि आप किसी भी लिंकर त्रुटियों को नहीं देख रहे हैं तो भी ऐसा करना एक अच्छा विचार हो सकता है, फिर भी आप VS2015 के लिए लाइब्रेरी से लिंक करते समय VS2015 के लिए प्लेटफ़ॉर्म टूलसेट कंपाइलर विकल्प का उपयोग कर समाप्त कर सकते हैं)।

मुझे नहीं पता कि यह मेरे लिए क्यों खराब हो गया है जब मैं किसी और के समान मुद्दों पर नहीं आया हूं, मुझे पहले विजुअल स्टूडियो समाधान को अपग्रेड करने में समस्याएं नहीं आई हैं।

मुझे यह भी पता नहीं चला है कि विंडोज किट के कुछ संस्करणों में अब विंडोज प्लेटफ़ॉर्म हेडर या सी ++ लाइब्रेरी हेडर क्यों हैं, जब पहले एसडीके के प्लेटफॉर्म हेडर होते थे जबकि सी ++ हेडर हमेशा भाग थे या विजुअल स्टूडियो इंस्टॉलेशन थे। ऐसा लगता है कि इस तरह के बदलाव के बारे में कहीं या कुछ अन्य दस्तावेज के बारे में एक देव ब्लॉग होना चाहिए। लेकिन जब तक यह काम करता है तब तक मुझे बहुत ज्यादा परवाह नहीं है।

मुझे उम्मीद है कि यह किसी की मदद करेगा।

+0

"मुझे यह भी पता नहीं चला है कि विंडोज किट के कुछ संस्करणों में अब विंडोज प्लेटफॉर्म हेडर या सी ++ लाइब्रेरी हेडर शामिल हैं, जबकि सी ++ हेडर हमेशा भाग या विजुअल स्टूडियो इंस्टॉलेशन थे।" --- मुझे लगता है कि शुरुआती दिनों में जब आपने वीएस को अपग्रेड किया था तो यह आपके प्रोग्राम के एमएफसी पुस्तकालयों, आपके कंपाइलर, आपके वीएस जीयूआई आदि को एक साथ अपग्रेड करेगा। यह नए कार्यक्रमों के लिए ठीक है लेकिन पुराने प्रोग्रामों में अलग-अलग विंडोज हेडर फाइलों, कंपाइलर मतभेदों के कारण भाषा त्रुटियों के कारण गलत पैरामीटर होंगे। मुझे संदेह है कि परिवर्तन सी ++ लाइब्रेरी के डीकॉप्लिंग और बहुमुखी प्रतिभा के लिए वीएस जीयूआई का हिस्सा है। – user3070485

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