क्या .NET फ्रेमवर्क के साथ C ++ का उपयोग करना संभव है?


18

मैंने GUI प्रोग्रामिंग के बारे में, C # और C ++ दोनों में कई टिप्पणियाँ पढ़ी हैं। और मैंने देखा कि Microsoft का .NET फ्रेमवर्क GUI प्रोग्रामिंग के लिए शक्तिशाली है। तो क्या C ++ और .NET फ्रेमवर्क का उपयोग करना संभव है?

मुझे लगता है कि यह एक बेहतरीन संयोजन होगा क्योंकि C ++ शक्तिशाली भाषा है, और .NET फ्रेमवर्क विंडोज पर GUI प्रोग्रामिंग के लिए पसंद किया जाता है, जैसा कि मैंने पढ़ा है। क्या GUI को C # में लिखना संभव है और C ++ में कार्यक्षमता?


7
C # भी एक बहुत शक्तिशाली भाषा है।
एडम क्रॉसलैंड

2
@ रामहाउंड: यह बिल्कुल सच नहीं है कि सी ++ / सीएलआई सी # जितना ही शक्तिशाली है। C ++ / CLI कोड में C ++ कंपाइलर से सभी ऑप्टिमाइज़ेशन हैं और तेज़ी से निष्पादित कर सकते हैं, और अभी भी कई मेटाप्रोग्रामिंग और प्रीप्रोसेसर तकनीक शामिल हैं जो C # में नहीं हैं।
डेडएमजी

2
साथ ही, यह C # लेने के लिए कोई चुनौती नहीं होनी चाहिए अगर कोई C ++ में अच्छा है। मैं नहीं कह रहा हूं, लेकिन मैं कह रहा हूं।
रिग

4
यह देखते हुए कि आप C ++ जानते हैं, आपके पास C ++ / CLI या C # सीखने के बीच एक विकल्प होगा। न ही वास्तविक C ++ है। मैं C ++ / CLI के साथ काम करने के बजाय C # सीखने का सुझाव दूंगा; C ++ / CLI कहीं भी एक मूल भाषा नहीं है, इसलिए आपको C # के लिए बहुत सी पुस्तकें और समर्थन मिलेगा।
डेविड थॉर्नले

6
@ddacot नहीं, सी ++ नहीं है मतलब बिल्कुल भी खेल के विकास के लिए। यह सॉफ्टवेयर विकास के लिए है, अन्य सभी प्रोग्रामिंग भाषाओं की तरह। गेम्स सिर्फ एक तरह का सॉफ्टवेयर होता है।
मैटवेवी

जवाबों:


21

हां, इसे पहले प्रबंधित C ++ और अब C ++ / CLI के रूप में जाना जाता है । आपके पास .NET फ्रेमवर्क (GUI: WinForms, GDI +, आदि) की संपूर्णता तक पहुंच है, क्योंकि आप अन्य तीन बंडल प्रबंधित भाषाओं, C #, F # और VB.NET से हैं।


जेसी के जवाब के लिए +1। अगर मैं गलत नहीं हूं, तो C ++ / CLI कई उत्तराधिकार का समर्थन नहीं करता है। तो, कुछ अप्रत्याशित सुविधाओं के लिए तैयार रहें। इनमें से कुछ विशेषताएं सीएलआई की सीमाओं से आई हैं। मैं आपको सलाह देता हूं कि आप इसका उपयोग शुरू करने से पहले C ++ / CLI और 'क्लासिक' C ++ के बीच अंतर खोजने की कोशिश करें।
इगोर सोलोय्डेनको

पहले लिंक में कुछ विस्तार से इसका उल्लेख किया गया है। सारांश इस प्रकार है: "C ++ समय के साथ बहुत विकसित हो गया है और भाषा में लिखा गया अधिकांश सॉफ्टवेयर ऑब्जेक्ट ओरिएंटेड है। प्रबंधित C ++ और क्लास और क्लास आधारित ऑब्जेक्ट का उपयोग Visual C ++ की तरह प्रचलित है। Man Man C ++ में इसके लिए एकमात्र बड़ा बदलाव है। यह है कि एकाधिक वंशानुक्रम की क्षमताओं का समर्थन नहीं किया जाता है। यह CLR की एक सीमा के कारण है। CLR के कचरा संग्रहक के तहत प्रबंधित एक वर्ग एक से अधिक वर्ग का वारिस नहीं कर सकता है। "
जेसी सी। स्लीकर

ठीक है। दरअसल, मैं C ++ में अच्छा नहीं हूं। मैंने सिर्फ सोचा था कि एक और महत्वपूर्ण अंतर हो सकता है जो समस्याएं पैदा कर सकता है।
इगोर सोलोय्डेनको

पिछली बार जब मैंने कुछ C ++ लिखा था, तो पिछली सदी में इसका शाब्दिक अर्थ था :)
जेसी सी। स्लीकर

1
@keykeeper, C ++ / CLI का एक विशिष्ट उपयोग एक अप्रबंधित C ++ लाइब्रेरी और प्रबंधित दुनिया के बीच एक पतला पुल होना है। यह इस तरह के उपयोग के लिए पर्याप्त है। निश्चित रूप से इसका अर्थ यह नहीं है कि इसमें कुछ परिवर्तन किया जा सके।
एसके-तर्क

6

सबसे लचीला और सरल विकल्प के बारे में मत भूलना, यूनिक्स दुनिया के लिए एक विशिष्ट लेकिन, किसी कारण से, विंडोज में आम नहीं है: जीयूआई और तर्क को अलग-अलग प्रक्रियाओं में विभाजित करना, आरपीसी के किसी भी उचित रूप से संचार करना (जैसे, यहां तक ​​कि एक पाइप भी होना चाहिए काम)। अधिमानतः एक सरल, मानव-पठनीय पाठ प्रोटोकॉल के साथ।

इस तरह से आप किसी भी प्रौद्योगिकियों को आप फैंसी के साथ जीयूआई (या विभिन्न जीयूआई) लागू कर सकते हैं, और जो कुछ भी ज़रूरत है उससे तर्क घटकों का निर्माण बेहतर - सी ++, स्क्रिप्ट, जो भी हो।

मुझे विंडोज दुनिया से एक अखंड डिजाइन दृष्टिकोण के किसी भी उचित लाभ के बारे में पता नहीं है।


4

मैंने कुछ साल पहले एक बार ऐसा किया था, वापस प्रबंधित C ++ के दिनों में। हमारे पास एक umanaged DLL में कुछ व्यावसायिक तर्क थे जिन्हें हम C # में एक विज़ार्ड-शैली GUI में शामिल करना चाहते थे। ऐसा करने के लिए, मैंने प्रबंधित GUI ऐप और अप्रबंधित DLL और प्रयुक्त सिस्टम के बीच बैठने के लिए एक प्रबंधित C ++ असेंबली बनाई: सिस्टम :: रनटाइम :: InteropServices :: मार्शल उस मान को प्रबंधित प्रकारों से परिवर्तित करने के लिए (सिस्टम :: Int32) अप्रबंधित प्रकार (int) और इसके विपरीत।

जबकि प्रबंधित C ++ को पदावनत प्रतीत होता है, वही मूल C ++ / CLI पर लागू हो सकता है।


3

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


7
मैं इस कथन से सहमत नहीं हूँ। C ++ / CLI कई कार्यान्वयनों के लिए पूरी तरह से उपयुक्त है।
रामहुंड

3
@ रामहाउंड: Microsoft स्वयं ही इसे अंतर्संबंध के लिए सुझाता है। यही उनकी आधिकारिक नीति है।
डेडएमजी

2
क्या आप इसके लिए एक स्रोत प्रदान कर सकते हैं?
sq33G

1
@DeadMG, आप गलत हैं। नेट लॉजिक के साथ .NET GUI चलाने के बहुत सारे विकल्प हैं।
SK- तर्क

2
@DeadMG - जब तक आप सबूत नहीं देते हैं कि Microsoft की आधिकारिक नीति (मुझे विश्वास नहीं है कि एक मिनट के लिए) तो आपके FUD के आसपास से गुजर रहा है
रामहाउंड

3

C ++ / CLI कोण को अब तक बहुत सारे उत्तरों द्वारा कवर किया गया है, लेकिन ऐसा करने का एक और तरीका PInvoke का उपयोग करना है। यह C # प्रोग्रामों को dll में निहित फ़ंक्शन को कॉल करने की अनुमति देता है जो C ++ में लिखे गए थे। PInvoke का लाभ यह है कि आपका dll इस तथ्य के बारे में पूरी तरह से अज्ञेय है कि इसे .Net से बुलाया जाएगा। इसका मतलब है कि आप dll के लिए कॉल कर सकते हैं जिसके लिए आपके पास कोई स्रोत कोड नहीं है, और यहां तक ​​कि अगर आपने स्रोत कोड किया है, तो आपको / clr विकल्प का उपयोग करके इसे फिर से स्थापित नहीं करना होगा। इसका मतलब है कि आप इस dll का उपयोग अन्य C ++ प्रोग्रामों के साथ-साथ C # प्रोग्राम्स के साथ भी कर सकते हैं। वहाँ कुछ शानदार C / C ++ पुस्तकालय हैं: PInvoke आपको इनका लाभ उठाने की अनुमति देता है। कभी-कभी Win32 लाइब्रेरी फ़ंक्शंस प्रदान करते हैं जो सिर्फ .Net में उपलब्ध नहीं होते हैं: PInvoke आपको उनका उपयोग करने की अनुमति देता है।

PInvoke का उपयोग करने के पेचीदा हिस्सों में से एक यह है कि अप्रबंधित हस्ताक्षर को प्रबंधित हस्ताक्षर में कैसे परिवर्तित किया जाए। लेकिन उस के साथ मदद करने के लिए एक धोखा दे रहा है।


लेकिन जब सी / पी + को सीधे इनवॉइस किया जाता है, तो मैनलिंग के बारे में पता होना चाहिए, या बीच में एक पतली सी आवरण प्रदान करना बेहतर होगा।
एसके-तर्क

0

आप COM (घटक ऑब्जेक्ट मॉडल) के माध्यम से सी # डिल के साथ भी काम कर सकते हैं। मेरे लिए COM बेहतर था, तब प्रबंधित C ++ का उपयोग करना क्योंकि Visual Studio 2010 में प्रबंधित C ++ के लिए अंतःविषय नहीं है। मेरे मामले में हमारे पास पहले से ही एक बड़ा C ++ एप्लिकेशन है, लेकिन MFC से WinForms या WPF में जाने की कोशिश करना चाहता था।

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