C ++ / CX और C ++ / CLI क्या हैं, और वे C ++ और WinRT से कैसे संबंधित हैं?


31

मैं मेट्रो ऐप डिजाइन करने के लिए C ++ सीखने की चुनौती लेने पर विचार कर रहा था और तभी मैं C ++ / CX में आया।

क्या मेट्रो ऐप्स को C ++ 11 में कोडित किया जा सकता है? क्या उन्हें काम करने के लिए C ++ / CX की आवश्यकता है? और वास्तव में C ++ / CX क्या है? क्या केवल C ++, या C ++ / CX का उपयोग करके मेट्रो ऐप बनाना संभव है? इसके अलावा, C ++ / CLI इस तस्वीर में कैसे बाँधता है?


साथ ही C ++ / CX का उपयोग अब हतोत्साहित किया गया है (C ++ / WinRT को प्राथमिकता दी गई है), डॉक्स
SWDV

जवाबों:


28

Microsoft केवल एक C ++ सिस्टम बनाता था जो आपको उनके Windows API (जिसे win32 कहा जाता है) का उपयोग करने देता है, फिर एक दिन उन्होंने .NET का आविष्कार किया और लगा कि सब कुछ बदलना होगा।

इसलिए उन्होंने "C ++ के लिए प्रबंधित एक्सटेंशन" बनाया, जो मूल रूप से C ++ था, लेकिन गैर-मानक एक्सटेंशन के भार के साथ, __gc.NET सुविधाओं का समर्थन करने के लिए जैसे कीवर्ड जोड़ रहा था (जैसे कि मूल निवासी के बजाय GC ढेर पर आवंटित करना)

लेकिन लोगों को यह पसंद नहीं आया क्योंकि यह वास्तव में उन सभी अतिरिक्त खोजशब्दों वाले नहीं थे, इसलिए Microsoft ने इसे फिर से डिज़ाइन किया और इसे C ++ / CLI कहा, जिसमें अतिरिक्त कीवर्ड का एक बहुत छोटा समूह था, लेकिन ^( जैसे है) जीसी हीप पर .NET ऑब्जेक्ट के लिए एक संदर्भ 'पॉइंटर')।

कुछ साल बाद और Microsoft ने महसूस किया है कि .NET उनके द्वारा की गई चांदी की गोली नहीं है, और उन्होंने अपनी इन-फाइटिंग विंडोज और डेवलपर टीमों को भी मिला दिया। इस पुनर्मूल्यांकन के एक हिस्से ने WinRT नामक एक बिल्कुल नए विंडोज एपीआई के निर्माण का नेतृत्व किया, जो पूरी तरह से देशी कोड है और इसका मतलब था कि पुराने एक्सटेंशन अब उपयोगी नहीं थे, इसलिए Microsoft ने अपने C ++ एक्सटेंशन को एक के लिए विकसित किया जो नए के साथ काम कर रहा था WinRT एपीआई आसान - C ++ / CLI (जैसे ^) से कुछ एक्सटेंशन रखकर।

तो - वहां आप जाते हैं, विस्तारित C ​​++ के 3 अलग-अलग संस्करण जो कि सतही रूप से C ++ है। कम से कम नवीनतम संस्करण फिर से मूल कोड है, इसलिए आपको एक्सटेंशन का उपयोग करने की आवश्यकता नहीं है यदि आप नहीं चाहते हैं क्योंकि आप सीधे एपीआई तक पहुंच सकते हैं (इसे डब्ल्यूआरएल कहा जाता है और पुराने एटीएल टेम्पलेट वर्गों की तरह है)

अगर आपको लगता है कि आप क्रॉस-प्लेटफ़ॉर्म कोड को कोड कर सकते हैं, तो आप - आप एपीआई कॉल को बदल सकते हैं, लेकिन आप ^विजुअल C ++ के अलावा किसी भी कंपाइलर का उपयोग नहीं कर सकते । मैं WRL API का उपयोग करने की सलाह दूंगा और अपने कोड को यथासंभव 'अतिरिक्त कोड' दिए जाने के लिए मानक को ध्यान में रखते हुए आपको C ++ / CX की तुलना में लिखने की आवश्यकता होगी जो इतना शानदार नहीं है।


नोट: C ++ / CX अंत तक उल्लेख नहीं है; यह स्पष्ट रूप से कहना अच्छा होगा कि कौन सा इसके पैराग्राफ में है।
शाहबलूतिक

11

Http://blogs.msdn.com/b/vcblog/archive/2012/08/29/cxxcxpart00anintroduction.aspx का हवाला देते हुए :

। । । जबकि C ++ / CX वाक्यात्मक रूप से C ++ / CLI के समान है और इस तरह लगभग कई मायनों में समान दिखता है, यह शब्दार्थ काफी भिन्न है। C ++ / CX कोड मूल कोड है, जिसमें कोई CLR आवश्यक नहीं है। C ++ / CLI में प्रोग्रामिंग करना बहुत चुनौतीपूर्ण हो सकता है, क्योंकि एक ही समय में दो अलग-अलग ऑब्जेक्ट मॉडल को चतुराई से बाजी मारना चाहिए: C ++ ऑब्जेक्ट मॉडल अपने नियतात्मक वस्तु जीवन काल और कचरा एकत्र CLI ऑब्जेक्ट मॉडल के साथ। C ++ / CX के साथ काम करने के लिए बहुत सरल है, क्योंकि Windows रनटाइम, जो COM पर आधारित है, C ++ प्रोग्रामिंग भाषा में बहुत अच्छी तरह से मैप करता है।

Windows रनटाइम एक अपेक्षाकृत सरल, निम्न-स्तरीय अनुप्रयोग बाइनरी इंटरफ़ेस (ABI) को परिभाषित करता है, और यह कहता है कि घटक एक सामान्य मेटाडेटा प्रारूप का उपयोग करके उनके प्रकारों को परिभाषित करते हैं। C ++ / CX को देशी Windows रनटाइम घटक लिखने के लिए कड़ाई से आवश्यक नहीं है: C ++ / CX भाषा एक्सटेंशन का उपयोग किए बिना C ++ का उपयोग करके Windows रनटाइम घटकों को लिखना काफी संभव है, और विजुअल C ++ 2012 में एक पुस्तकालय शामिल है, Windows रनटाइम + ++ टेम्पलेट लाइब्रेरी ( WRL), इसे आसान बनाने में मदद करने के लिए। विंडोज रनटाइम घटकों में से कई जो विंडोज के हिस्से के रूप में जहाज करते हैं (विंडोज नामस्थान में) WRL का उपयोग करके लिखे गए हैं। C ++ / CX में कोई जादू नहीं है: यह सिर्फ C ++ में विंडोज रनटाइम घटकों को लिखता है, बहुत सरल है और WRL जैसे लाइब्रेरी-आधारित समाधान का उपयोग करते समय आपको दोहराए जाने वाले क्रिया कोड की मात्रा में कटौती करने में मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.