घटक वस्तु मॉडल: Difference between revisions

From Vigyanwiki
No edit summary
Line 31: Line 31:
| base_standards    = [[Microsoft Interface Definition Language|MIDL]], [[Universally unique identifier|UUID]]
| base_standards    = [[Microsoft Interface Definition Language|MIDL]], [[Universally unique identifier|UUID]]
}}
}}
कंपोनेंट ऑब्जेक्ट मॉडल (COM) एक [[एप्लिकेशन बाइनरी इंटरफ़ेस]] है। 1993 में [[Microsoft]] द्वारा पेश किए गए घटक-आधारित सॉफ़्टवेयर इंजीनियरिंग के लिए बाइनरी-इंटरफ़ेस मानक। इसका उपयोग [[प्रोग्रामिंग भाषा]]ओं की एक बड़ी रेंज में [[ अंतःप्रक्रम संचार ]] [[ वस्तु (कंप्यूटर विज्ञान) ]] के निर्माण को सक्षम करने के लिए किया जाता है। . COM कई अन्य Microsoft तकनीकों और फ्रेमवर्क का आधार है, जिसमें [[जोडकर परनिगरानी और उद्देश् य]], OLE ऑटोमेशन, [[ब्राउज़र सहायक वस्तु]], [[ActiveX]], #COM+|COM+, [[वितरित घटक वस्तु मॉडल]], Windows शेल, [[DirectX]], [[UMDF]] और Windows रनटाइम शामिल हैं। COM का सार वस्तुओं को लागू करने का एक भाषा-तटस्थ तरीका है जिसका उपयोग उन वातावरणों से भिन्न वातावरण में किया जा सकता है जिनमें वे बनाए गए थे, यहां तक ​​कि मशीन की सीमाओं के पार भी। अच्छी तरह से लिखे गए घटकों के लिए, COM उन वस्तुओं के पुन: उपयोग की अनुमति देता है जिनके आंतरिक कार्यान्वयन का कोई ज्ञान नहीं है, क्योंकि यह घटक कार्यान्वयनकर्ताओं को अच्छी तरह से परिभाषित [[इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] प्रदान करने के लिए मजबूर करता है जो कार्यान्वयन से अलग होते हैं। भाषाओं के विभिन्न आबंटन शब्दार्थों को सन्दर्भ गणना|संदर्भ-गणना के माध्यम से वस्तुओं को उनके स्वयं के निर्माण और विनाश के लिए जिम्मेदार बनाकर समायोजित किया जाता है। किसी वस्तु के विभिन्न इंटरफेस के बीच प्रकार रूपांतरण किसके माध्यम से प्राप्त किया जाता है <code>QueryInterface</code> तरीका। COM के भीतर वंशानुक्रम की पसंदीदा विधि उप-ऑब्जेक्ट्स का निर्माण है, जिसके लिए विधि कॉल प्रत्यायोजित की जाती हैं।
'''कंपोनेंट ऑब्जेक्ट मॉडल''' (सीओएम) एक [[एप्लिकेशन बाइनरी इंटरफ़ेस|एप्लिकेशन बाइनरी अंतरापृष्ठ]] है। 1993 में [[Microsoft|माइक्रोसॉफ्ट]] द्वारा प्रस्तुत किए गए घटक-आधारित सॉफ़्टवेयर इंजीनियरिंग के लिए बाइनरी-अंतरापृष्ठ मानक इसका उपयोग [[प्रोग्रामिंग भाषा]]ओं की एक बड़ी रेंज में [[ अंतःप्रक्रम संचार |अंतःप्रक्रम संचार]] [[ वस्तु (कंप्यूटर विज्ञान) |वस्तु (कंप्यूटर विज्ञान)]] के निर्माण को सक्षम करने के लिए किया जाता है। सीओएम कई अन्य माइक्रोसॉफ्ट तकनीकों और फ्रेमवर्क का आधार है, जिसमें [[जोडकर परनिगरानी और उद्देश् य|ओएलई]], ओएलई ऑटोमेशन, [[ब्राउज़र सहायक वस्तु|ब्राउज़र हेल्पर ऑब्जेक्ट]], [[ActiveX|एक्टिव एक्स]], सीओएम+, डीसीओएम+, [[वितरित घटक वस्तु मॉडल]], विंडोज़ शेल, [[DirectX|डायरेक्ट एक्स]], [[UMDF|यूएमडीएफ]] और विंडोज़ रनटाइम सम्मिलित हैं। सीओएम का सार वस्तुओं को लागू करने का एक भाषा-तटस्थ तरीका है जिसका उपयोग उन वातावरणों से भिन्न वातावरण में किया जा सकता है जिनमें वे बनाए गए थे, यहां तक ​​कि मशीन की सीमाओं के पार भी इसका उपयोग किया जा सकता है। अच्छी तरह से लिखे गए घटकों के लिए, सीओएम उन वस्तुओं के पुन: उपयोग की अनुमति देता है जिनके आंतरिक कार्यान्वयन का कोई ज्ञान नहीं है, क्योंकि यह घटक कार्यान्वयनकर्ताओं को अच्छी तरह से परिभाषित [[इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|अंतरापृष्ठ (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] प्रदान करने के लिए विवश करता है जो कार्यान्वयन से अलग होते हैं। भाषाओं के विभिन्न आवंटन शब्दार्थों को सन्दर्भ गणना के माध्यम से वस्तुओं को उनके स्वयं के निर्माण और विनाश के लिए उत्तरदायी बनाकर समायोजित किया जाता है। किसी वस्तु के विभिन्न अंतरापृष्ठ के बीच प्रकार रूपांतरण किसके माध्यम से प्राप्त किया जाता है <code>QueryIएनटीerface</code> तरीका सीओएम के भीतर वंशानुक्रम की पसंदीदा विधि उप-ऑब्जेक्ट्स का निर्माण है, जिसके लिए विधि कॉल प्रत्यायोजित की जाती हैं।


COM एक इंटरफ़ेस तकनीक है जिसे केवल [[Microsoft Windows]] और Apple के [[Core Foundation]] 1.3 और बाद में प्लग-इन [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (API) पर मानक के रूप में परिभाषित और कार्यान्वित किया गया है।<ref>{{cite web|url=https://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFPlugIns/Concepts/conceptual.html#//apple_ref/doc/uid/20001160-102910-BAJFDFFC|title=दस्तावेज़ीकरण संग्रह|website=developer.apple.com}}</ref> उत्तरार्द्ध केवल पूरे COM इंटरफ़ेस का सबसेट लागू करता है।<ref name="COM on MacOS">{{cite web | url = https://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFPlugIns/Concepts/com.html#//apple_ref/doc/uid/20001158-CJBEJBHH | title = प्लग-इन और माइक्रोसॉफ्ट के COM| publisher = [[Apple Inc.]] | access-date = 2010-10-05}}</ref> कुछ अनुप्रयोगों के लिए, COM को कम से कम कुछ हद तक .NET Framework|Microsoft .NET फ़्रेमवर्क, और Windows संचार फ़ाउंडेशन (WCF) के माध्यम से वेब सेवाओं के लिए समर्थन द्वारा प्रतिस्थापित किया गया है। हालांकि, .NET COM इंटरऑप के माध्यम से COM ऑब्जेक्ट्स का उपयोग सभी .NET भाषाओं के साथ किया जा सकता है। नेटवर्क्ड DCOM बाइनरी [[ मालिकाना प्रारूप ]] का उपयोग करता है, जबकि WCF [[XML]]- आधारित SOAP (प्रोटोकॉल) मैसेजिंग के उपयोग को प्रोत्साहित करता है। COM अन्य घटक सॉफ़्टवेयर इंटरफ़ेस तकनीकों के समान है, जैसे [[CORBA]] और एंटरप्राइज JavaBeans, हालांकि प्रत्येक की अपनी ताकत और कमजोरियां हैं। C++ के विपरीत, COM एक स्थिर [[अनुप्रयोग बाइनरी इंटरफ़ेस]] (ABI) प्रदान करता है जो कंपाइलर रिलीज़ के बीच नहीं बदलता है।<ref>Microsoft forum: [https://archive.today/20130216110824/http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/86eda6a7-4d90-4e19-a9d4-6cbe22b661f4 Binary compatibility across Visual C++ versions]</ref> यह COM इंटरफेस को ऑब्जेक्ट-ओरिएंटेड C++ लाइब्रेरी के लिए आकर्षक बनाता है, जिनका उपयोग ग्राहकों द्वारा विभिन्न कंपाइलर संस्करणों का उपयोग करके संकलित किया जाता है।
सीओएम एक अंतरापृष्ठ तकनीक है जिसे केवल [[Microsoft Windows|माइक्रोसॉफ्ट विंडोज़]] और एप्पल के [[Core Foundation|कोर फाउंडेशन]] 1.3 और बाद में प्लग-इन [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (एपीआई) पर मानक के रूप में परिभाषित और कार्यान्वित किया गया है।<ref>{{cite web|url=https://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFPlugIns/Concepts/conceptual.html#//apple_ref/doc/uid/20001160-102910-BAJFDFFC|title=दस्तावेज़ीकरण संग्रह|website=developer.apple.com}}</ref> उत्तरार्द्ध केवल पूरे सीओएम अंतरापृष्ठ का सबसेट लागू करता है।<ref name="COM on MacOS">{{cite web | url = https://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFPlugIns/Concepts/com.html#//apple_ref/doc/uid/20001158-CJBEJBHH | title = प्लग-इन और माइक्रोसॉफ्ट के COM| publisher = [[Apple Inc.]] | access-date = 2010-10-05}}</ref> कुछ अनुप्रयोगों के लिए, सीओएम को कम से कम कुछ हद तक .नेट फ़्रेमवर्क, माइक्रोसॉफ्ट .नेट फ़्रेमवर्क, और विंडोज़ संचार फ़ाउंडेशन (डब्ल्यूसीएफ) के माध्यम से वेब सेवाओं के लिए समर्थन द्वारा प्रतिस्थापित किया गया है। हालांकि, .नेट सीओएम इंटरऑप के माध्यम से सीओएम ऑब्जेक्ट्स का उपयोग सभी .नेट भाषाओं के साथ किया जा सकता है। नेटवर्क्ड डीसीओएम बाइनरी [[ मालिकाना प्रारूप |उत्तरदायी प्रारूप]] का उपयोग करता है, जबकि डब्ल्यूसीएफ [[XML|एक्सएमएल]]- आधारित एसओएपी (प्रोटोकॉल) मैसेजिंग के उपयोग को प्रोत्साहित करता है। सीओएम अन्य घटक सॉफ़्टवेयर अंतरापृष्ठ तकनीकों के समान है, जैसे [[CORBA|कोबरा]] और एंटरप्राइज जावाबीन्स, हालांकि प्रत्येक की अपनी ताकत और कमजोरियां हैं। C++ के विपरीत, सीओएम एक स्थिर [[अनुप्रयोग बाइनरी इंटरफ़ेस|अनुप्रयोग बाइनरी अंतरापृष्ठ]] (एबीआई) प्रदान करता है जो कंपाइलर रिलीज़ के बीच नहीं बदलता है।<ref>Microsoft forum: [https://archive.today/20130216110824/http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/86eda6a7-4d90-4e19-a9d4-6cbe22b661f4 Binary compatibility across Visual C++ versions]</ref> यह सीओएम अंतरापृष्ठ को ऑब्जेक्ट-ओरिएंटेड सीC++ लाइब्रेरी के लिए आकर्षक बनाता है, जिनका उपयोग ग्राहकों द्वारा विभिन्न कंपाइलर संस्करणों का उपयोग करके संकलित किया जाता है।


== इतिहास ==
== इतिहास ==
विंडोज़ में इंटरप्रोसेस संचार के पहले तरीकों में से एक [[डायनेमिक डेटा एक्सचेंज]] (डीडीई) था,<ref>{{cite web
विंडोज़ में इंटरप्रोसेस संचार के पहले तरीकों में से एक [[डायनेमिक डेटा एक्सचेंज|डायनेमिक डेटा स्थानांतरण]] (डीडीई) था,<ref>{{cite web
   |title=नेटवर्क डीडीई के बारे में - विंडोज़ अनुप्रयोग|website=[[Microsoft]].com
   |title=नेटवर्क डीडीई के बारे में - विंडोज़ अनुप्रयोग|website=[[Microsoft]].com
   |url=https://docs.microsoft.com/en-us/windows/desktop/ipc/about-network-dde
   |url=https://docs.microsoft.com/en-us/windows/desktop/ipc/about-network-dde
   |date=May 30, 2018}}</ref> पहली बार 1987 में पेश किया गया,<ref>{{cite web  |website=[[McAfee]].com
   |date=May 30, 2018}}</ref> जिसे पहली बार 1987 में प्रस्तुत किया गया,<ref>{{cite web  |website=[[McAfee]].com
   |title=Code Execution Technique Takes Advantage of Dynamic Data Exchange
   |title=Code Execution Technique Takes Advantage of Dynamic Data Exchange
   |url=https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/code-execution-technique-takes-advantage-of-dynamic-data-exchange
   |url=https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/code-execution-technique-takes-advantage-of-dynamic-data-exchange
   |date=October 27, 2017}}</ref> जो अनुप्रयोगों के बीच तथाकथित वार्तालापों में संदेश भेजने और प्राप्त करने की अनुमति देता है। एंटनी विलियम्स (प्रौद्योगिकीविद्), जो COM आर्किटेक्चर के निर्माण में शामिल थे, ने बाद में Microsoft में दो आंतरिक पेपर वितरित किए जिन्होंने सॉफ्टवेयर घटकों की अवधारणा को अपनाया: ऑब्जेक्ट आर्किटेक्चर: डीलिंग विथ द अननोन - या - टाइप सेफ्टी इन ए डायनेमिकली एक्सटेंसिबल क्लास लाइब्रेरी 1988 में और इनहेरिटेंस: व्हाट इट मीन्स एंड हाउ टू यूज़ इट इन 1990। इसने COM के पीछे कई विचारों की नींव प्रदान की। ऑब्जेक्ट लिंकिंग एंड एंबेडिंग (OLE), Microsoft का पहला ऑब्जेक्ट-आधारित फ्रेमवर्क, DDE के शीर्ष पर बनाया गया था और विशेष रूप से मिश्रित दस्तावेज़ों के लिए डिज़ाइन किया गया था। इसे 1991 में विंडोज और [[ Microsoft Excel ]] के लिए वर्ड के साथ पेश किया गया था, और बाद में 1992 में वर्जन 3.1 के साथ शुरू करते हुए विंडोज के साथ शामिल किया गया था। कंपाउंड डॉक्यूमेंट का एक उदाहरण विंडोज डॉक्यूमेंट के लिए वर्ड में एम्बेडेड [[स्प्रेडशीट]] है: जैसा कि इसमें बदलाव किए जाते हैं। एक्सेल में स्प्रेडशीट, वे स्वचालित रूप से वर्ड डॉक्यूमेंट के अंदर दिखाई देते हैं।
   |date=October 27, 2017}}</ref> जो अनुप्रयोगों के बीच तथाकथित कम्युनिकेशनों में संदेश भेजने और प्राप्त करने की अनुमति देता है। एंटनी विलियम्स (प्रौद्योगिकीविद्), जो सीओएम आर्किटेक्चर के निर्माण में सम्मिलित थे, ने बाद में माइक्रोसॉफ्ट में दो आंतरिक पेपर वितरित किए जिन्होंने सॉफ्टवेयर घटकों की अवधारणा को अपनाया: ऑब्जेक्ट आर्किटेक्चर: डीलिंग विथ द अननोन - या - टाइप सेफ्टी इन ए डायनेमिकली एक्सटेंसिबल क्लास लाइब्रेरी 1988 में और इनहेरिटेंस: व्हाट इट मीन्स एंड हाउ टू यूज़ इट इन 1990 में इसने सीओएम के पीछे कई विचारों की नींव प्रदान की। ऑब्जेक्ट लिंकिंग एंड एंबेडिंग (ओएलई), माइक्रोसॉफ्ट का पहला ऑब्जेक्ट-आधारित फ्रेमवर्क, डीडीई के शीर्ष पर बनाया गया था और विशेष रूप से मिश्रित डॉक्यूमेंटों के लिए डिज़ाइन किया गया था। इसे 1991 में विंडोज और [[ Microsoft Excel |माइक्रोसॉफ्ट एक्सेल]] के लिए वर्ड के साथ प्रस्तुत किया गया था, और बाद में 1992 में वर्जन 3.1 के साथ प्रारम्भ करते हुए विंडोज के साथ सम्मिलित किया गया था। कंपाउंड डॉक्यूमेंट का एक उदाहरण विंडोज डॉक्यूमेंट के लिए वर्ड में एम्बेडेड [[स्प्रेडशीट]] है: जैसा कि इसमें बदलाव किए जाते हैं। एक्सेल में स्प्रेडशीट, वे स्वचालित रूप से वर्ड डॉक्यूमेंट के अंदर दिखाई देते हैं।


1991 में, Microsoft ने [[Visual Basic]] एक्सटेंशन (VBX) को Visual Basic 1.0 के साथ पेश किया। एक VBX एक [[डायनेमिक-लिंक लाइब्रेरी]] (DLL) के रूप में एक पैकेज्ड एक्सटेंशन है जो वस्तुओं को ग्राफिक रूप से एक रूप में रखने और [[संपत्ति (प्रोग्रामिंग)]] और [[विधि (कंप्यूटर विज्ञान)]] द्वारा हेरफेर करने की अनुमति देता है। इन्हें बाद में अन्य भाषाओं जैसे [[विजुअल सी ++]] ++ द्वारा उपयोग के लिए अनुकूलित किया गया था। 1992 में, जब Windows का Windows 3.1x|3.1 संस्करण जारी किया गया था, तो Microsoft ने इसके अंतर्निहित [[ वस्तु मॉडल ]] के साथ OLE 2 जारी किया। COM एप्लिकेशन बाइनरी इंटरफ़ेस (ABI) MAPI ABI (1992 में जारी) के समान था, और जैसे यह [[MSRPC]] पर आधारित था और अंततः [[ खुला समूह ]] के DCE/RPC पर आधारित था। जबकि OLE 1 [[यौगिक दस्तावेज़]]ों पर केंद्रित था, COM और OLE 2 को सामान्य रूप से सॉफ़्टवेयर घटकों को संबोधित करने के लिए डिज़ाइन किया गया था। टेक्स्ट वार्तालाप और विंडोज संदेश एक मजबूत और एक्स्टेंसिबल तरीके से एप्लिकेशन सुविधाओं को साझा करने की अनुमति देने के लिए पर्याप्त लचीले साबित नहीं हुए थे, इसलिए COM को एक नई नींव के रूप में बनाया गया था, और OLE को OLE2 में बदल दिया गया था। 1994 में [[OLE कस्टम नियंत्रण]] (OCXs) को VBX नियंत्रणों के उत्तराधिकारी के रूप में पेश किया गया था। उसी समय, Microsoft ने कहा कि OLE 2 को केवल OLE के रूप में जाना जाएगा, और यह कि OLE अब एक संक्षिप्त नाम नहीं था, बल्कि कंपनी की सभी घटक तकनीकों के लिए एक नाम था। 1996 की शुरुआत में, Microsoft ने OLE कस्टम नियंत्रणों के लिए एक नया उपयोग पाया, सामग्री को प्रस्तुत करने के लिए अपने वेब ब्राउज़र की क्षमता का विस्तार करते हुए, [[इंटरनेट]] ActiveX से संबंधित OLE के कुछ हिस्सों का नाम बदल दिया, और धीरे-धीरे सभी OLE तकनीकों का नाम बदलकर ActiveX कर दिया, यौगिक दस्तावेज़ तकनीक को छोड़कर [[माइक्रोसॉफ्ट ऑफिस]] में उपयोग किया जाता है। उस वर्ष बाद में, Microsoft ने वितरित घटक ऑब्जेक्ट मॉडल के साथ पूरे नेटवर्क में काम करने के लिए COM का विस्तार किया।<ref>{{Cite journal|url=https://datatracker.ietf.org/doc/draft-brown-dcom-v1-spec/|title=draft-brown-dcom-v1-spec-03 - Distributed Component Object Model Protocol -- DCOM/1.0|newspaper=Ietf Datatracker|date=March 11, 1998|access-date=2019-08-29|last1=Brown|first1=Nina|last2=Kindel|first2=Charlie}}</ref>
1991 में, माइक्रोसॉफ्ट ने [[Visual Basic|विज़ुअल बेसिक]] एक्सटेंशन (वीबीएक्सX) को विज़ुअल बेसिक 1.0 के साथ प्रस्तुत किया। एक वीबीएक्स एक [[डायनेमिक-लिंक लाइब्रेरी]] (डीएलएल) के रूप में एक पैकेज्ड एक्सटेंशन है जो वस्तुओं को ग्राफिक रूप से एक रूप में रखने और [[संपत्ति (प्रोग्रामिंग)|गुणधर्म (प्रोग्रामिंग)]] और [[विधि (कंप्यूटर विज्ञान)]] द्वारा हेरफेर करने की अनुमति देता है। इन्हें बाद में अन्य भाषाओं जैसे [[विजुअल सी ++]] ++ द्वारा उपयोग के लिए अनुकूलित किया गया था। 1992 में, जब विंडोज़ का विंडोज़ 3.1x संस्करण जारी किया गया था, तो माइक्रोसॉफ्ट ने इसके अंतर्निहित [[ वस्तु मॉडल |वस्तु मॉडल]] के साथ ओएलई 2 जारी किया। सीओएम एप्लिकेशन बाइनरी अंतरापृष्ठ (एबीआई) एमएपीआई एबीआई (1992 में जारी) के समान था, और जैसे यह [[MSRPC|एमएसआरपीसी]] पर आधारित था और अंततः [[ खुला समूह |खुला समूह]] के डीसीई/आरपीसी पर आधारित था। जबकि ओएलई 1 [[यौगिक दस्तावेज़|यौगिक डॉक्यूमेंट]] पर केंद्रित था, सीओएम और ओएलई 2 को सामान्य रूप से सॉफ़्टवेयर घटकों को संबोधित करने के लिए डिज़ाइन किया गया था। टेक्स्ट कम्युनिकेशन और विंडोज संदेश एक मजबूत और एक्स्टेंसिबल तरीके से एप्लिकेशन सुविधाओं को साझा करने की अनुमति देने के लिए पर्याप्त लचीले प्रमाणित नहीं हुए थे, इसलिए सीओएम को एक नई नींव के रूप में बनाया गया था, और ओएलई को ओएलई2 में बदल दिया गया था। 1994 में [[OLE कस्टम नियंत्रण|ओएलई कस्टम नियंत्रण]] (ओसीएक्स) को वीबीएक्सX नियंत्रणों के उत्तराधिकारी के रूप में प्रस्तुत किया गया था। उसी समय, माइक्रोसॉफ्ट ने कहा कि ओएलई 2 को केवल ओएलई के रूप में जाना जाएगा, और यह कि ओएलई अब एक संक्षिप्त नाम नहीं था, बल्कि कंपनी की सभी घटक तकनीकों के लिए एक नाम था। 1996 के प्रारम्भ में, माइक्रोसॉफ्ट ने ओएलई कस्टम नियंत्रणों के लिए एक नया उपयोग पाया, सामग्री को प्रस्तुत करने के लिए अपने वेब ब्राउज़र की क्षमता का विस्तार करते हुए, [[इंटरनेट]] एक्टिव एक्स से संबंधित ओएलई के कुछ हिस्सों का नाम बदल दिया, और धीरे-धीरे सभी ओएलई तकनीकों का नाम बदलकर एक्टिव एक्स कर दिया, यौगिक डॉक्यूमेंट तकनीक को छोड़कर [[माइक्रोसॉफ्ट ऑफिस]] में उपयोग किया जाता है। उस वर्ष बाद में, माइक्रोसॉफ्ट ने वितरित घटक ऑब्जेक्ट मॉडल के साथ पूरे नेटवर्क में काम करने के लिए सीओएम का विस्तार किया।<ref>{{Cite journal|url=https://datatracker.ietf.org/doc/draft-brown-dcom-v1-spec/|title=draft-brown-dcom-v1-spec-03 - Distributed Component Object Model Protocol -- DCOM/1.0|newspaper=Ietf Datatracker|date=March 11, 1998|access-date=2019-08-29|last1=Brown|first1=Nina|last2=Kindel|first2=Charlie}}</ref>




== संबंधित प्रौद्योगिकियां ==
== संबंधित प्रौद्योगिकियां ==
COM विंडोज के लिए प्रमुख सॉफ्टवेयर डेवलपमेंट प्लेटफॉर्म था और इस तरह, कई सहायक तकनीकों के विकास को प्रभावित किया। यह वैसे ही पहले की तकनीकों से काफी प्रभावित था।
सीओएम विंडोज के लिए प्रमुख सॉफ्टवेयर डेवलपमेंट प्लेटफॉर्म था और इस तरह, कई सहायक तकनीकों के विकास को प्रभावित किया। यह वैसे ही पहले की तकनीकों से काफी प्रभावित था।


=== डीडीई ===
=== डीडीई ===
COM ने डायनेमिक डेटा एक्सचेंज को इंटरप्रोसेस संचार के पसंदीदा रूप के रूप में बदल दिया।
सीओएम ने डायनेमिक डेटा स्थानांतरण को इंटरप्रोसेस संचार के पसंदीदा रूप में बदल दिया।


=== डीसीई/आरपीसी और एमएसआरपीसी ===
=== डीसीई/आरपीसी और एमएसआरपीसी ===
क्रॉस-भाषा घटक मॉडल के रूप में, COM वस्तुओं और संबंधित कार्यों का वर्णन करने के लिए इंटरफ़ेस परिभाषा भाषा या आईडीएल पर निर्भर करता है। COM IDL ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन के साथ, सुविधा संपन्न DCE/RPC IDL पर बहुत अधिक आधारित है। Microsoft का खुद का DCE/RPC का कार्यान्वयन, जिसे MSRPC के रूप में जाना जाता है, का उपयोग Windows NT सेवाओं और आंतरिक घटकों के लिए प्राथमिक अंतर-प्रक्रिया संचार तंत्र के रूप में किया जाता है, जिससे यह नींव का एक स्पष्ट विकल्प बन जाता है।
क्रॉस-भाषा घटक मॉडल के रूप में, सीओएम वस्तुओं और संबंधित कार्यों का वर्णन करने के लिए अंतरापृष्ठ परिभाषा भाषा या आईडीएल पर निर्भर करता है। सीओएम आईडीएल ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन के साथ, सुविधा संपन्न डीसीई/आरपीसी आईडीएल पर बहुत अधिक आधारित है। माइक्रोसॉफ्ट का खुद का डीसीई/आरपीसी का कार्यान्वयन, जिसे एमएसआरपीसी के रूप में जाना जाता है, का उपयोग विंडोज़ एनटी सेवाओं और आंतरिक घटकों के लिए प्राथमिक अंतर-प्रक्रिया संचार तंत्र के रूप में किया जाता है, जिससे यह नींव का एक स्पष्ट विकल्प बन जाता है।


=== वितरित घटक वस्तु मॉडल ===
=== वितरित घटक वस्तु मॉडल ===
DCOM (डिस्ट्रीब्यूटेड कॉम) ने COM की पहुंच को विंडोज डेस्कटॉप पर संचार करने वाले अलग-अलग एप्लिकेशन के साथ केवल एक उपयोगकर्ता का समर्थन करने, विभिन्न सुरक्षा संदर्भों के तहत चलने वाली वस्तुओं को सक्रिय करने और नेटवर्क पर विभिन्न मशीनों पर विस्तारित किया। इसके साथ ही कॉल करने वाले उपयोगकर्ता की पहचान करने के साथ-साथ कॉल की सुरक्षा के लिए आवश्यक एन्क्रिप्शन निर्दिष्ट करने के लिए कॉन्फ़िगर करने के लिए आवश्यक सुविधाएँ जोड़ी गईं, जिनके पास उपयोगकर्ताओं को बनाने, सक्रिय करने और कॉल करने का अधिकार है।
डीसीओएम (डिस्ट्रीब्यूटेड कॉम) ने सीओएम की पहुंच को विंडोज डेस्कटॉप पर संचार करने वाले अलग-अलग एप्लिकेशन के साथ केवल एक उपयोगकर्ता का समर्थन करने, विभिन्न सुरक्षा संदर्भों के तहत चलने वाली वस्तुओं को सक्रिय करने और नेटवर्क पर विभिन्न मशीनों पर विस्तारित किया। इसके साथ ही कॉल करने वाले उपयोगकर्ता की पहचान करने के साथ-साथ कॉल की सुरक्षा के लिए आवश्यक एन्क्रिप्शन निर्दिष्ट करने के लिए कॉन्फ़िगर करने के लिए आवश्यक सुविधाएँ जोड़ी गईं, जिनके पास उपयोगकर्ताओं को बनाने, सक्रिय करने और कॉल करने का अधिकार है।


===कॉम+===
===कॉम+===
माइक्रोसॉफ्ट के लिए डेवलपर्स को [[वितरित लेनदेन]], संसाधन पूलिंग, डिस्कनेक्ट किए गए एप्लिकेशन, इवेंट प्रकाशन और सदस्यता, बेहतर मेमोरी और प्रोसेसर (थ्रेड) प्रबंधन के साथ-साथ विंडोज को अन्य एंटरप्राइज़-स्तरीय ऑपरेटिंग सिस्टम के विकल्प के रूप में स्थापित करने के लिए समर्थन प्रदान करने के लिए, Microsoft ने Windows NT 4 पर [[Microsoft Transaction Server]] (MTS) नामक एक तकनीक पेश की। Windows 2000 के साथ, COM के उस महत्वपूर्ण विस्तार को ऑपरेटिंग सिस्टम में शामिल किया गया (जैसा कि Microsoft Transaction Server द्वारा प्रदान किए गए बाहरी उपकरणों की श्रृंखला के विपरीत) और COM+ का नाम बदल दिया गया। उसी समय, Microsoft ने एक अलग इकाई के रूप में वितरित घटक ऑब्जेक्ट मॉडल पर जोर दिया। COM+ सेवाओं का उपयोग करने वाले घटकों को सीधे COM+ की अतिरिक्त परत द्वारा नियंत्रित किया जाता था, विशेष रूप से इंटरसेप्शन के लिए ऑपरेटिंग सिस्टम समर्थन द्वारा। एमटीएस की पहली रिलीज में, इंटरसेप्शन पर काम किया गया था - एमटीएस घटक स्थापित करने से एमटीएस सॉफ्टवेयर को कॉल करने के लिए [[विंडोज रजिस्ट्री]] को संशोधित किया जाएगा, न कि सीधे घटक को। Windows 2000 ने COM+ घटकों को कॉन्फ़िगर करने के लिए उपयोग किए जाने वाले घटक सेवा नियंत्रण कक्ष अनुप्रयोग को भी संशोधित किया।
माइक्रोसॉफ्ट के लिए डेवलपर्स को [[वितरित लेनदेन]], संसाधन पूलिंग, डिस्कनेक्ट किए गए एप्लिकेशन, इवेंट प्रकाशन और सदस्यता, बेहतर मेमोरी और प्रोसेसर (थ्रेड) प्रबंधन के साथ-साथ विंडोज को अन्य एंटरप्राइज़-स्तरीय ऑपरेटिंग सिस्टम के विकल्प के रूप में स्थापित करने के लिए समर्थन प्रदान करने के लिए, माइक्रोसॉफ्ट ने विंडोज़ एनटी 4 पर [[Microsoft Transaction Server|माइक्रोसॉफ्ट ट्रांज़ैक्शन सर्वर]] (एमटीएस) नामक एक तकनीक प्रस्तुत की। विंडोज़ 2000 के साथ, सीओएम के उस महत्वपूर्ण विस्तार को ऑपरेटिंग सिस्टम में सम्मिलित किया गया (जैसा कि माइक्रोसॉफ्ट ट्रांज़ैक्शन सर्वर द्वारा प्रदान किए गए बाहरी उपकरणों की श्रृंखला के विपरीत) और सीओएम+ का नाम बदल दिया गया। उसी समय, माइक्रोसॉफ्ट ने एक अलग इकाई के रूप में वितरित घटक ऑब्जेक्ट मॉडल पर जोर दिया। सीओएम+ सेवाओं का उपयोग करने वाले घटकों को सीधे सीओएम+ की अतिरिक्त परत द्वारा नियंत्रित किया जाता था, विशेष रूप से इंटरसेप्शन के लिए ऑपरेटिंग सिस्टम समर्थन द्वारा। एमटीएस की पहली रिलीज में, इंटरसेप्शन पर काम किया गया था - एमटीएस घटक स्थापित करने से एमटीएस सॉफ्टवेयर को कॉल करने के लिए [[विंडोज रजिस्ट्री]] को संशोधित किया जाएगा, न कि सीधे घटक को। विंडोज़ 2000 ने सीओएम+ घटकों को कॉन्फ़िगर करने के लिए उपयोग किए जाने वाले घटक सेवा नियंत्रण कक्ष अनुप्रयोग को भी संशोधित किया।


COM+ का एक फायदा यह था कि इसे घटक फार्मों में चलाया जा सकता था। एक घटक के उदाहरणों को, यदि ठीक से कोडित किया गया है, तो पूल किया जा सकता है और नए कॉल द्वारा इसकी आरंभिक दिनचर्या में इसे मेमोरी से अनलोड किए बिना पुन: उपयोग किया जा सकता है। घटक भी वितरित किए जा सकते हैं (किसी अन्य मशीन से बुलाए गए)। COM+ और [[Microsoft Visual Studio]] ने क्लाइंट-साइड प्रॉक्सी उत्पन्न करना आसान बनाने के लिए उपकरण प्रदान किए, इसलिए यद्यपि DCOM का उपयोग दूरस्थ कॉल करने के लिए किया गया था, लेकिन डेवलपर्स के लिए ऐसा करना आसान था। COM+ ने COM+ ईवेंट्स नामक एक सब्सक्राइबर/प्रकाशक ईवेंट मैकेनिज़्म भी प्रस्तुत किया, और क्यूड कंपोनेंट्स नामक घटकों के साथ Microsoft संदेश क्यूइंग (एक तकनीक जो इंटर-एप्लिकेशन एसिंक्रोनस मैसेजिंग प्रदान करती है) का लाभ उठाने का एक नया तरीका प्रदान किया। COM+ इवेंट प्रकाशक या सब्सक्राइबर और इवेंट सिस्टम के बीच लेट-बाउंड (देर [[देर से बांधना]] देखें) इवेंट या मेथड कॉल को सपोर्ट करने के लिए COM+ प्रोग्रामिंग मॉडल का विस्तार करते हैं।
सीओएम+ का एक फायदा यह था कि इसे घटक फार्मों में चलाया जा सकता था। एक घटक के उदाहरणों को, यदि ठीक से कोडित किया गया है, तो पूल किया जा सकता है और नए कॉल द्वारा इसकी आरंभिक दिनचर्या में इसे मेमोरी से अनलोड किए बिना पुन: उपयोग किया जा सकता है। घटक भी वितरित किए जा सकते हैं (किसी अन्य मशीन से बुलाए गए)। सीओएम+ और [[Microsoft Visual Studio|माइक्रोसॉफ्ट विजुअल स्टूडियो]] ने क्लाइंट-साइड प्रॉक्सी उत्पन्न करना आसान बनाने के लिए उपकरण प्रदान किए, इसलिए यद्यपि डीसीओएम का उपयोग दूरस्थ कॉल करने के लिए किया गया था, लेकिन डेवलपर्स के लिए ऐसा करना आसान था। सीओएम+ ने सीओएम+ ईवेंट्स नामक एक सब्सक्राइबर/प्रकाशक ईवेंट मैकेनिज़्म भी प्रस्तुत किया, और क्यूड कंपोनेंट्स नामक घटकों के साथ माइक्रोसॉफ्ट संदेश क्यूइंग (एक तकनीक जो इंटर-एप्लिकेशन एसिंक्रोनस मैसेजिंग प्रदान करती है) का लाभ उठाने का एक नया तरीका प्रदान किया। सीओएम+ इवेंट प्रकाशक या सब्सक्राइबर और इवेंट सिस्टम के बीच लेट-बाउंड इवेंट या मेथड कॉल को सपोर्ट करने के लिए सीओएम+ प्रोग्रामिंग मॉडल का विस्तार करते हैं।


=== नेट ===
=== नेट ===
{{Main|.NET Framework}}
{{Main|.नेट फ्रेमवर्क}}
Microsoft .NET घटक प्रौद्योगिकी प्रदान करने और COM+ (COM-इंटरॉप-असेंबली के माध्यम से) के साथ इंटरैक्ट करने के लिए साधन प्रदान करता है; .NET आमतौर पर उपयोग किए जाने वाले अधिकांश COM नियंत्रणों को रैपर प्रदान करता है। Microsoft .NET घटक निर्माण से अधिकांश विवरण छुपाता है और इसलिए विकास को आसान बनाता है। .NET, System.EnterpriseServices नामस्थान के माध्यम से COM+ का लाभ उठा सकता है, और COM+ द्वारा प्रदान की जाने वाली कई सेवाओं को .NET की हाल की रिलीज़ में डुप्लिकेट किया गया है। उदाहरण के लिए, .NET में System.Transactions नेमस्पेस TransactionScope वर्ग प्रदान करता है, जो COM+ का सहारा लिए बिना लेनदेन प्रबंधन प्रदान करता है। इसी तरह, [[कतार (डेटा संरचना)]] को विंडोज कम्युनिकेशन फाउंडेशन द्वारा MSMQ ट्रांसपोर्ट के साथ बदला जा सकता है। ([[एमएसएमक्यू]] एक देशी COM घटक है, हालांकि।) पिछड़े संगतता के लिए सीमित समर्थन है। [[ रनटाइम कॉल करने योग्य रैपर ]] (RCW) को लागू करके .NET में COM ऑब्जेक्ट का उपयोग किया जा सकता है।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/8bwh56xe.aspx|title=रनटाइम कॉल करने योग्य रैपर|last=rpetrusha|website=msdn.microsoft.com}}</ref> NET ऑब्जेक्ट्स जो कुछ इंटरफ़ेस प्रतिबंधों के अनुरूप होते हैं, COM ऑब्जेक्ट में COM कॉल करने योग्य रैपर (CCW) को कॉल करके उपयोग किए जा सकते हैं।<ref>{{cite web|url=http://msdn.microsoft.com/f07c8z1c.aspx|title=COM कॉल करने योग्य रैपर|last=rpetrusha|website=msdn.microsoft.com}}</ref> COM और .NET दोनों पक्षों से, अन्य तकनीक का उपयोग करने वाली वस्तुएँ मूल वस्तुओं के रूप में दिखाई देती हैं। कॉम इंटरऑप देखें।
 
विंडोज कम्युनिकेशन फाउंडेशन (विंडोज कम्युनिकेशन फाउंडेशन) COM की कई दूरस्थ निष्पादन चुनौतियों को आसान बनाता है। उदाहरण के लिए, यह वस्तुओं को पारदर्शी रूप से प्रक्रिया या मशीन की सीमाओं के मूल्य से अधिक आसानी से मार्शल करने की अनुमति देता है।
माइक्रोसॉफ्ट .नेट घटक प्रौद्योगिकी प्रदान करने और सीओएम+ (सीओएम-इंटरॉप-असेंबली के माध्यम से) के साथ पारस्परिक क्रिया करने के लिए साधन प्रदान करता है; .नेट सामान्यतः उपयोग किए जाने वाले अधिकांश सीओएम नियंत्रणों को रैपर प्रदान करता है। माइक्रोसॉफ्ट .नेट घटक निर्माण से अधिकांश विवरण छुपाता है और इसलिए विकास को आसान बनाता है। .नेट, सिस्टम.एंटरप्राइज़सर्विसेज नामस्थान के माध्यम से सीओएम+ का लाभ उठा सकता है, और सीओएम+ द्वारा प्रदान की जाने वाली कई सेवाओं को .नेट की हाल की रिलीज़ में डुप्लिकेट किया गया है। उदाहरण के लिए, .नेट में सिस्टम.ट्रांज़ैक्शन नेमस्पेस ट्रांज़ैक्शनकोप वर्ग प्रदान करता है, जो सीओएम+ का सहारा लिए बिना लेनदेन प्रबंधन प्रदान करता है। इसी तरह, [[कतार (डेटा संरचना)]] को विंडोज कम्युनिकेशन फाउंडेशन द्वारा एमएसएमक्यू ट्रांसपोर्ट के साथ बदला जा सकता है। ([[एमएसएमक्यू]] एक देशी सीओएम घटक है, हालांकि) पिछड़े संगतता के लिए सीमित समर्थन है। [[ रनटाइम कॉल करने योग्य रैपर |रनटाइम कॉल करने योग्य रैपर]] (आरसीडब्ल्यू) को लागू करके .नेट में सीओएम ऑब्जेक्ट का उपयोग किया जा सकता है।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/8bwh56xe.aspx|title=रनटाइम कॉल करने योग्य रैपर|last=rpetrusha|website=msdn.microsoft.com}}</ref> नेट ऑब्जेक्ट्स जो कुछ अंतरापृष्ठ प्रतिबंधों के अनुरूप होते हैं, सीओएम ऑब्जेक्ट में सीओएम कॉल करने योग्य रैपर (सीसीडब्ल्यू) को कॉल करके उपयोग किए जा सकते हैं।<ref>{{cite web|url=http://msdn.microsoft.com/f07c8z1c.aspx|title=COM कॉल करने योग्य रैपर|last=rpetrusha|website=msdn.microsoft.com}}</ref> सीओएम और .नेट दोनों पक्षों से, अन्य तकनीक का उपयोग करने वाली वस्तुएँ मूल वस्तुओं के रूप में दिखाई देती हैं। ''कॉम इंटरऑप देखें।''
 
विंडोज कम्युनिकेशन फाउंडेशन (विंडोज कम्युनिकेशन फाउंडेशन) सीओएम की कई दूरस्थ निष्पादन चुनौतियों को आसान बनाता है। उदाहरण के लिए, यह वस्तुओं को पारदर्शी रूप से प्रक्रिया या मशीन की सीमाओं के मूल्य से अधिक आसानी से मार्शल करने की अनुमति देता है।


=== विंडोज रनटाइम ===
=== विंडोज रनटाइम ===
{{Main|Windows Runtime}}
{{Main|विंडोज़ रनटाइम}}
माइक्रोसॉफ्ट का विंडोज रनटाइम (या विनआरटी, [[विंडोज आरटी]] के साथ भ्रमित नहीं होना) प्रोग्रामिंग और एप्लिकेशन मॉडल अनिवार्य रूप से एक कॉम-आधारित एपीआई है, हालांकि यह एक उन्नत कॉम पर निर्भर करता है। इसके COM जैसे आधार के कारण, Windows रनटाइम कई भाषाओं से अपेक्षाकृत आसान इंटरफेसिंग की अनुमति देता है, जैसा कि COM करता है, लेकिन यह अनिवार्य रूप से एक अप्रबंधित, देशी API है। हालाँकि, एपीआई परिभाषाएँ .winmd फ़ाइलों में संग्रहीत हैं, जो ECMA 335 मेटाडेटा प्रारूप में एन्कोडेड हैं, वही [[मेटाडेटा (सीएलआई)]]CLI) प्रारूप जो .NET कुछ संशोधनों के साथ उपयोग करता है। जब WinRT को .NET अनुप्रयोगों से मंगाया जाता है, तो यह सामान्य मेटाडेटा प्रारूप P/Invoke की तुलना में काफी कम ओवरहेड की अनुमति देता है, और इसका सिंटैक्स बहुत सरल है।
माइक्रोसॉफ्ट का विंडोज रनटाइम (या विनआरटी, [[विंडोज आरटी]] के साथ भ्रमित नहीं होना) प्रोग्रामिंग और एप्लिकेशन मॉडल अनिवार्य रूप से एक कॉम-आधारित एपीआई है, हालांकि यह एक उन्नत कॉम पर निर्भर करता है। इसके सीओएम जैसे आधार के कारण, विंडोज़ रनटाइम कई भाषाओं से अपेक्षाकृत आसान अंतरापृष्ठिंग की अनुमति देता है, जैसा कि सीओएम करता है, लेकिन यह अनिवार्य रूप से एक अप्रबंधित, देशी एपीआई है। हालाँकि, एपीआई परिभाषाएँ .winmd फ़ाइलों में संग्रहीत हैं, जो ECMA 335 मेटाडेटा प्रारूप में एन्कोडेड हैं, वही [[मेटाडेटा (सीएलआई)]]CLI) प्रारूप जो .नेट कुछ संशोधनों के साथ उपयोग करता है। जब WinRT को .नेट अनुप्रयोगों से मंगाया जाता है, तो यह सामान्य मेटाडेटा प्रारूप P/Invoke की तुलना में काफी कम ओवरहेड की अनुमति देता है, और इसका सिंटैक्स बहुत सरल है।


=== नैनो-कॉम (उर्फ [[XPCOM]]) ===
=== नैनो-कॉम (उर्फ [[XPCOM|XPसीओएम]]) ===
नैनो-कॉम कंपोनेंट ऑब्जेक्ट मॉडल का एक बहुत छोटा उपसमुच्चय है जो विशेष रूप से कॉम के एप्लिकेशन बाइनरी इंटरफेस (एबीआई) पहलुओं पर केंद्रित है जो स्वतंत्र रूप से संकलित मॉड्यूल/घटकों में फ़ंक्शन और विधि कॉल को सक्षम करता है। नैनो-कॉम को एक सी++ हेडर फ़ाइल में आसानी से व्यक्त किया जा सकता है जो सभी सी++ कंपाइलरों के लिए पोर्टेबल है। नैनो-कॉम टाइप किए गए ऑब्जेक्ट संदर्भों के लिए समर्थन जोड़ने के लिए अंतर्निहित निर्देश आर्किटेक्चर और ओएस के मूल एबीआई को बढ़ाता है (सामान्य एबीआई केवल परमाणु प्रकार, संरचनाओं, सरणियों और फ़ंक्शन कॉलिंग सम्मेलनों पर ध्यान केंद्रित करता है)। नैनो-कॉम के आधार का उपयोग Mozilla द्वारा Firefox (XPCOM कहा जाता है) को बूटस्ट्रैप करने के लिए किया गया था, और वर्तमान में DirectX/[[Direct3D]]/[[DirectML]] के लिए आधार ABI तकनीक के रूप में उपयोग में है।
नैनो-कॉम कंपोनेंट ऑब्जेक्ट मॉडल का एक बहुत छोटा उपसमुच्चय है जो विशेष रूप से कॉम के एप्लिकेशन बाइनरी अंतरापृष्ठ (एबीआई) पहलुओं पर केंद्रित है जो स्वतंत्र रूप से संकलित मॉड्यूल/घटकों में फ़ंक्शन और विधि कॉल को सक्षम करता है। नैनो-कॉम को एक सी++ हेडर फ़ाइल में आसानी से व्यक्त किया जा सकता है जो सभी सी++ कंपाइलरों के लिए पोर्टेबल है। नैनो-कॉम टाइप किए गए ऑब्जेक्ट संदर्भों के लिए समर्थन जोड़ने के लिए अंतर्निहित निर्देश आर्किटेक्चर और ओएस के मूल एबीआई को बढ़ाता है (सामान्य एबीआई केवल परमाणु प्रकार, संरचनाओं, सरणियों और फ़ंक्शन कॉलिंग सम्मेलनों पर ध्यान केंद्रित करता है)। नैनो-कॉम के आधार का उपयोग Mozilla द्वारा Firefox (XPसीओएम कहा जाता है) को बूटस्ट्रैप करने के लिए किया गया था, और वर्तमान में डायरेक्टX/[[Direct3D|डायरेक्ट3D]]/[[DirectML|डायरेक्टML]] के लिए आधार एबीआई तकनीक के रूप में उपयोग में है।


एक नैनो-कॉम हेडर फ़ाइल कम से कम तीन प्रकारों को परिभाषित या नाम देती है:
एक नैनो-कॉम हेडर फ़ाइल कम से कम तीन प्रकारों को परिभाषित या नाम देती है:
* इंटरफ़ेस प्रकारों की पहचान करने के लिए GUID - यह प्रभावी रूप से 128 बिट संख्या है
* अंतरापृष्ठ प्रकारों की पहचान करने के लिए GUID - यह प्रभावी रूप से 128 बिट संख्या है
* विधि कॉल से त्रुटि कोड की पहचान करने के लिए HRESULT - यह प्रभावी रूप से 32-बिट ints के प्रसिद्ध मानों (S_OK, E_FAIL, E_OUTOFMEMORY, आदि) का मानकीकृत उपयोग है।
* विधि कॉल से त्रुटि कोड की पहचान करने के लिए HRESULT - यह प्रभावी रूप से 32-बिट iएनटीs के प्रसिद्ध मानों (S_OK, E_FAIL, E_OUTOFMEMORY, आदि) का मानकीकृत उपयोग है।
* Iसभी टाइप किए गए ऑब्जेक्ट संदर्भों के लिए आधार प्रकार के रूप में अज्ञात - यह समर्थन करने के लिए प्रभावी रूप से सार वर्चुअल फ़ंक्शंस है <code>dynamic_cast<T></code>नए इंटरफ़ेस प्रकारों का -स्टाइल अधिग्रहण और एक ला की गिनती करना <code>shared_ptr<T></code>
* Iसभी टाइप किए गए ऑब्जेक्ट संदर्भों के लिए आधार प्रकार के रूप में अज्ञात - यह समर्थन करने के लिए प्रभावी रूप से सार वर्चुअल फ़ंक्शंस है <code>dynamic_cast<T></code>नए अंतरापृष्ठ प्रकारों का -स्टाइल अधिग्रहण और एक ला की गिनती करना <code>shared_ptr<T></code>
नैनो-कॉम के कई उपयोग परिणाम के रूप में कैली-आवंटित मेमोरी बफ़र्स को संबोधित करने के लिए दो कार्यों को भी परिभाषित करते हैं
नैनो-कॉम के कई उपयोग परिणाम के रूप में कैली-आवंटित मेमोरी बफ़र्स को संबोधित करने के लिए दो कार्यों को भी परिभाषित करते हैं
* <NanoCom>Alloc - कॉल करने वाले को लौटाए जाने वाले कच्चे बफर (ऑब्जेक्ट नहीं) आवंटित करने के लिए विधि कार्यान्वयन द्वारा बुलाया जाता है
* <Nanoसीओएम>Alloc - कॉल करने वाले को लौटाए जाने वाले कच्चे बफर (ऑब्जेक्ट नहीं) आवंटित करने के लिए विधि कार्यान्वयन द्वारा बुलाया जाता है
* <NanoCom>निःशुल्क - विधि कॉल करने वालों द्वारा कैली-आवंटित बफ़र्स को एक बार उपयोग में नहीं होने पर मुक्त करने के लिए कॉल किया जाता है
* <Nanoसीओएम>निःशुल्क - विधि कॉल करने वालों द्वारा कैली-आवंटित बफ़र्स को एक बार उपयोग में नहीं होने पर मुक्त करने के लिए कॉल किया जाता है


नैनो-कॉम के कुछ कार्यान्वयन जैसे कि डायरेक्ट 3 डी एलोकेटर फ़ंक्शंस से बचते हैं और केवल कॉलर-आवंटित बफ़र्स का उपयोग करने के लिए खुद को प्रतिबंधित करते हैं।
नैनो-कॉम के कुछ कार्यान्वयन जैसे कि डायरेक्ट 3 डी एलोकेटर फ़ंक्शंस से बचते हैं और केवल कॉलर-आवंटित बफ़र्स का उपयोग करने के लिए खुद को प्रतिबंधित करते हैं।
Line 89: Line 91:


== सुरक्षा ==
== सुरक्षा ==
COM और ActiveX घटकों को बिना किसी सैंडबॉक्सिंग के उपयोगकर्ता की मशीन पर देशी कोड के रूप में चलाया जाता है। इसलिए कोड क्या कर सकता है, इस पर कुछ प्रतिबंध हैं। [[इंटरनेट एक्सप्लोरर]] के साथ वेब पेजों पर ActiveX घटकों को एम्बेड करने के पूर्व अभ्यास ने [[मैलवेयर]] संक्रमणों के साथ समस्याओं को जन्म दिया। Microsoft ने ActiveX के साथ समस्या को 1996 में ही पहचान लिया था जब चार्ल्स फिट्जगेराल्ड ने कहा था, हमने कभी भी यह दावा नहीं किया कि ActiveX आंतरिक रूप से सुरक्षित है।<ref>{{cite web |last1=Steinberg |first1=Jill |date=1997-03-01 |df=mdy |url=https://www.infoworld.com/article/2077623/competing-components-make-for-prickly-panelists.html |title=कांटेदार पैनलिस्ट के लिए प्रतिस्पर्धी घटक बनाते हैं|work=[[JavaWorld]] |access-date=2020-07-16}}</ref> हाल ही का {{when|date=August 2016}} Internet Explorer के संस्करण ActiveX नियंत्रणों को स्थापित करने से पहले उपयोगकर्ता को संकेत देते हैं, उपयोगकर्ता को उन साइटों से नियंत्रणों की स्थापना को अस्वीकार करने में सक्षम बनाता है जिन पर उपयोगकर्ता भरोसा नहीं करता है। ActiveX नियंत्रण उनकी प्रामाणिकता की गारंटी के लिए डिजिटल हस्ताक्षर के साथ [[कोड हस्ताक्षर]] कर रहे हैं। ActiveX नियंत्रणों को पूरी तरह से अक्षम करना या केवल कुछ चुनिंदा को अनुमति देना भी संभव है। आउट-ऑफ-प्रोसेस COM सर्वरों के लिए पारदर्शी समर्थन अभी भी [[प्रक्रिया अलगाव]] के संदर्भ में सॉफ़्टवेयर सुरक्षा को बढ़ावा देता है। यह बड़े अनुप्रयोग के सबसिस्टम को अलग-अलग प्रक्रियाओं में अलग करने के लिए उपयोगी हो सकता है। प्रक्रिया अलगाव एक प्रक्रिया में राज्य के भ्रष्टाचार को अन्य प्रक्रियाओं की अखंडता को नकारात्मक रूप से प्रभावित करने से रोकता है, क्योंकि वे केवल कड़ाई से परिभाषित इंटरफेस के माध्यम से संचार करते हैं। इस प्रकार, वैध स्थिति को पुनः प्राप्त करने के लिए केवल प्रभावित सबसिस्टम को पुनः आरंभ करने की आवश्यकता है। यह एक ही प्रक्रिया के भीतर सबसिस्टम के मामले में नहीं है, जहां एक सबसिस्टम में एक दुष्ट सूचक अन्य सबसिस्टम को बेतरतीब ढंग से दूषित कर सकता है।
सीओएम और एक्टिव एक्स घटकों को बिना किसी सैंडबॉक्सिंग के उपयोगकर्ता की मशीन पर देशी कोड के रूप में चलाया जाता है। इसलिए कोड क्या कर सकता है, इस पर कुछ प्रतिबंध हैं। [[इंटरनेट एक्सप्लोरर]] के साथ वेब पेजों पर एक्टिव एक्स घटकों को एम्बेड करने के पूर्व अभ्यास ने [[मैलवेयर]] संक्रमणों के साथ समस्याओं को जन्म दिया। माइक्रोसॉफ्ट ने एक्टिव एक्स के साथ समस्या को 1996 में ही पहचान लिया था जब चार्ल्स फिट्जगेराल्ड ने कहा था, हमने कभी भी यह दावा नहीं किया कि एक्टिव एक्स आंतरिक रूप से सुरक्षित है।<ref>{{cite web |last1=Steinberg |first1=Jill |date=1997-03-01 |df=mdy |url=https://www.infoworld.com/article/2077623/competing-components-make-for-prickly-panelists.html |title=कांटेदार पैनलिस्ट के लिए प्रतिस्पर्धी घटक बनाते हैं|work=[[JavaWorld]] |access-date=2020-07-16}}</ref> हाल ही का {{when|date=August 2016}} Iएनटीerनेट Explorer के संस्करण एक्टिव एक्स नियंत्रणों को स्थापित करने से पहले उपयोगकर्ता को संकेत देते हैं, उपयोगकर्ता को उन साइटों से नियंत्रणों की स्थापना को अस्वीकार करने में सक्षम बनाता है जिन पर उपयोगकर्ता भरोसा नहीं करता है। एक्टिव एक्स नियंत्रण उनकी प्रामाणिकता की गारंटी के लिए डिजिटल हस्ताक्षर के साथ [[कोड हस्ताक्षर]] कर रहे हैं। एक्टिव एक्स नियंत्रणों को पूरी तरह से अक्षम करना या केवल कुछ चुनिंदा को अनुमति देना भी संभव है। आउट-ऑफ-प्रोसेस सीओएम सर्वरों के लिए पारदर्शी समर्थन अभी भी [[प्रक्रिया अलगाव]] के संदर्भ में सॉफ़्टवेयर सुरक्षा को बढ़ावा देता है। यह बड़े अनुप्रयोग के सबसिस्टम को अलग-अलग प्रक्रियाओं में अलग करने के लिए उपयोगी हो सकता है। प्रक्रिया अलगाव एक प्रक्रिया में राज्य के भ्रष्टाचार को अन्य प्रक्रियाओं की अखंडता को नकारात्मक रूप से प्रभावित करने से रोकता है, क्योंकि वे केवल कड़ाई से परिभाषित अंतरापृष्ठ के माध्यम से संचार करते हैं। इस प्रकार, वैध स्थिति को पुनः प्राप्त करने के लिए केवल प्रभावित सबसिस्टम को पुनः आरंभ करने की आवश्यकता है। यह एक ही प्रक्रिया के भीतर सबसिस्टम के मामले में नहीं है, जहां एक सबसिस्टम में एक दुष्ट सूचक अन्य सबसिस्टम को बेतरतीब ढंग से दूषित कर सकता है।


== तकनीकी विवरण ==
== तकनीकी विवरण ==
COM प्रोग्रामर COM-जागरूक सॉफ़्टवेयर घटकों का उपयोग करके अपने सॉफ़्टवेयर का निर्माण करते हैं। क्लास आईडी (CLSIDs) द्वारा विभिन्न घटक प्रकारों की पहचान की जाती है, जो वैश्विक रूप से विशिष्ट पहचानकर्ता (GUIDs) हैं। प्रत्येक COM घटक एक या अधिक इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के माध्यम से अपनी कार्यक्षमता को उजागर करता है। एक घटक द्वारा समर्थित विभिन्न इंटरफेस इंटरफ़ेस आईडी (आईआईडी) का उपयोग करके एक दूसरे से अलग होते हैं, जो कि GUID भी हैं। COM इंटरफेस में कई भाषाओं में [[ भाषा बंधन ]] होती है, जैसे C (प्रोग्रामिंग लैंग्वेज), [[C++]], विजुअल बेसिक, [[ डेल्फी (प्रोग्रामिंग भाषा) ]], पायथन (प्रोग्रामिंग लैंग्वेज)।<ref>{{cite web|url=http://docs.activestate.com/activepython/2.4/pywin32/html/com/win32com/HTML/docindex.html|title=win32com Documentation Index|website=docs.activestate.com}}</ref><ref>{{cite web|url=http://www.boddie.org.uk/python/COM.html|title=पायथन और कॉम|website=www.boddie.org.uk}}</ref> और कई स्क्रिप्टिंग भाषाओं को विंडोज प्लेटफॉर्म पर लागू किया गया। घटकों तक सभी पहुंच इंटरफेस की विधि (कंप्यूटर विज्ञान) के माध्यम से की जाती है। यह इंटर-प्रोसेस, या यहां तक ​​कि इंटर-कंप्यूटर प्रोग्रामिंग (DCOM के समर्थन का उपयोग करने वाला बाद वाला) जैसी तकनीकों की अनुमति देता है।
सीओएम प्रोग्रामर सीओएम-जागरूक सॉफ़्टवेयर घटकों का उपयोग करके अपने सॉफ़्टवेयर का निर्माण करते हैं। क्लास आईडी (CLSIDs) द्वारा विभिन्न घटक प्रकारों की पहचान की जाती है, जो वैश्विक रूप से विशिष्ट पहचानकर्ता (GUIDs) हैं। प्रत्येक सीओएम घटक एक या अधिक अंतरापृष्ठ (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के माध्यम से अपनी कार्यक्षमता को उजागर करता है। एक घटक द्वारा समर्थित विभिन्न अंतरापृष्ठ अंतरापृष्ठ आईडी (आईआईडी) का उपयोग करके एक दूसरे से अलग होते हैं, जो कि GUID भी हैं। सीओएम अंतरापृष्ठ में कई भाषाओं में [[ भाषा बंधन |भाषा बंधन]] होती है, जैसे C (प्रोग्रामिंग लैंग्वेज), [[C++]], विजुअल बेसिक, [[ डेल्फी (प्रोग्रामिंग भाषा) |डेल्फी (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग लैंग्वेज)।<ref>{{cite web|url=http://docs.activestate.com/activepython/2.4/pywin32/html/com/win32com/HTML/docindex.html|title=win32com Documentation Index|website=docs.activestate.com}}</ref><ref>{{cite web|url=http://www.boddie.org.uk/python/COM.html|title=पायथन और कॉम|website=www.boddie.org.uk}}</ref> और कई स्क्रिप्टिंग भाषाओं को विंडोज प्लेटफॉर्म पर लागू किया गया। घटकों तक सभी पहुंच अंतरापृष्ठ की विधि (कंप्यूटर विज्ञान) के माध्यम से की जाती है। यह इंटर-प्रोसेस, या यहां तक ​​कि इंटर-कंप्यूटर प्रोग्रामिंग (डीसीओएम के समर्थन का उपयोग करने वाला बाद वाला) जैसी तकनीकों की अनुमति देता है।


=== इंटरफेस ===
=== अंतरापृष्ठ ===
सभी COM घटक अज्ञात (कस्टम) इंटरफ़ेस को लागू करते हैं, जो संदर्भ गणना और प्रकार रूपांतरण (कास्टिंग) के तरीकों को उजागर करता है। एक कस्टम I अज्ञात इंटरफ़ेस में एक वर्चुअल विधि तालिका के लिए एक सूचक होता है जिसमें उन कार्यों के लिए पॉइंटर्स की एक सूची होती है जो इंटरफ़ेस में घोषित कार्यों को लागू करते हैं, उसी क्रम में वे इंटरफ़ेस में घोषित किए जाते हैं। इन-प्रोसेस इनवोकेशन ओवरहेड इसलिए C ++ में [[आभासी विधि तालिका]] के बराबर है। कस्टम इंटरफेस के अलावा, COM IDISpatch से इनहेरिट करने वाले डिस्पैच इंटरफेस का भी समर्थन करता है। डिस्पैच इंटरफेस OLE ऑटोमेशन के लिए लेट बाइंडिंग का समर्थन करता है। यह डिस्पैच इंटरफेस को कस्टम इंटरफेस की तुलना में प्रोग्रामिंग भाषाओं की एक विस्तृत श्रृंखला से मूल रूप से एक्सेस करने की अनुमति देता है।
सभी सीओएम घटक अज्ञात (कस्टम) अंतरापृष्ठ को लागू करते हैं, जो संदर्भ गणना और प्रकार रूपांतरण (कास्टिंग) के तरीकों को उजागर करता है। एक कस्टम I अज्ञात अंतरापृष्ठ में एक वर्चुअल विधि तालिका के लिए एक सूचक होता है जिसमें उन कार्यों के लिए पॉइंटर्स की एक सूची होती है जो अंतरापृष्ठ में घोषित कार्यों को लागू करते हैं, उसी क्रम में वे अंतरापृष्ठ में घोषित किए जाते हैं। इन-प्रोसेस इनवोकेशन ओवरहेड इसलिए C ++ में [[आभासी विधि तालिका]] के बराबर है। कस्टम अंतरापृष्ठ के अलावा, सीओएम IDISpatch से इनहेरिट करने वाले डिस्पैच अंतरापृष्ठ का भी समर्थन करता है। डिस्पैच अंतरापृष्ठ ओएलई ऑटोमेशन के लिए लेट बाइंडिंग का समर्थन करता है। यह डिस्पैच अंतरापृष्ठ को कस्टम अंतरापृष्ठ की तुलना में प्रोग्रामिंग भाषाओं की एक विस्तृत श्रृंखला से मूल रूप से एक्सेस करने की अनुमति देता है।


=== कक्षाएं ===
=== कक्षाएं ===
एक COM वर्ग (coclass) एक या एक से अधिक इंटरफेस का एक ठोस कार्यान्वयन है, और वस्तु-उन्मुख प्रोग्रामिंग भाषाओं में कक्षाओं के समान है। कक्षाएं उनकी क्लास आईडी ([[CLSID]]) या उनके प्रोग्रामेटिक आइडेंटिफ़ायर स्ट्रिंग ([[ProgID]]) के आधार पर बनाई जाती हैं। कई वस्तु-उन्मुख भाषाओं की तरह, COM इंटरफ़ेस को कार्यान्वयन से अलग करता है। यह अंतर विशेष रूप से COM में मजबूत है, जहां वस्तुओं को सीधे एक्सेस नहीं किया जा सकता है, लेकिन केवल उनके इंटरफेस के माध्यम से। COM के पास एक ही इंटरफ़ेस के कई कार्यान्वयन के लिए समर्थन भी है, ताकि रन टाइम (प्रोग्राम जीवनचक्र चरण) पर क्लाइंट यह चुन सकें कि इंटरफ़ेस के किस कार्यान्वयन को तुरंत चालू किया जाए।
एक सीओएम वर्ग (coclass) एक या एक से अधिक अंतरापृष्ठ का एक ठोस कार्यान्वयन है, और वस्तु-उन्मुख प्रोग्रामिंग भाषाओं में कक्षाओं के समान है। कक्षाएं उनकी क्लास आईडी ([[CLSID]]) या उनके प्रोग्रामेटिक आइडेंटिफ़ायर स्ट्रिंग ([[ProgID]]) के आधार पर बनाई जाती हैं। कई वस्तु-उन्मुख भाषाओं की तरह, सीओएम अंतरापृष्ठ को कार्यान्वयन से अलग करता है। यह अंतर विशेष रूप से सीओएम में मजबूत है, जहां वस्तुओं को सीधे एक्सेस नहीं किया जा सकता है, लेकिन केवल उनके अंतरापृष्ठ के माध्यम से। सीओएम के पास एक ही अंतरापृष्ठ के कई कार्यान्वयन के लिए समर्थन भी है, ताकि रन टाइम (प्रोग्राम जीवनचक्र चरण) पर क्लाइंट यह चुन सकें कि अंतरापृष्ठ के किस कार्यान्वयन को तुरंत चालू किया जाए।


=== इंटरफ़ेस परिभाषा भाषा और प्रकार पुस्तकालय ===
=== अंतरापृष्ठ परिभाषा भाषा और प्रकार पुस्तकालय ===
प्रकार पुस्तकालयों में COM प्रकारों का प्रतिनिधित्व करने के लिए मेटाडेटा होता है। इन प्रकारों को [[ Microsoft इंटरफ़ेस परिभाषा भाषा ]] (एमएसआईडीएल/आईडीएल) का उपयोग करके वर्णित किया गया है। IDL फाइलें ऑब्जेक्ट-ओरिएंटेड क्लासेस, इंटरफेस, स्ट्रक्चर्स, एन्यूमरेशन और अन्य यूजर-डिफाइन्ड टाइप्स को भाषा स्वतंत्र तरीके से परिभाषित करती हैं। IDL कुछ अतिरिक्त कीवर्ड जैसे इंटरफेस और कक्षाओं के संग्रह को परिभाषित करने के लिए इंटरफ़ेस और लाइब्रेरी के साथ C ++ घोषणाओं के समान है। IDL अतिरिक्त जानकारी प्रदान करने के लिए घोषणा से पहले ब्रैकेटेड विशेषताओं के उपयोग का भी समर्थन करता है, जैसे कि इंटरफ़ेस GUID और पॉइंटर पैरामीटर और लंबाई फ़ील्ड के बीच संबंध। आईडीएल फाइलें एमआईडीएल कंपाइलर द्वारा संकलित की जाती हैं। C/C++ के लिए, MIDL कंपाइलर एक कंपाइलर-स्वतंत्र हेडर फ़ाइल बनाता है जिसमें घोषित इंटरफेस की वर्चुअल मेथड टेबल से मिलान करने के लिए स्ट्रक्चर डेफिनिशन होता है और एक C फाइल जिसमें इंटरफ़ेस ग्लोबली यूनिक आइडेंटिफायर की घोषणा होती है। एक प्रॉक्सी मॉड्यूल के लिए C++ स्रोत कोड भी MIDL [[संकलक]] द्वारा उत्पन्न किया जा सकता है। इस प्रॉक्सी में प्रक्रिया से बाहर संचार के लिए DCOM को सक्षम करने के लिए COM कॉल को दूरस्थ प्रक्रिया कॉल में परिवर्तित करने के लिए विधि स्टब्स हैं। आईडीएल फाइलों को एमआईडीएल कंपाइलर द्वारा टाइप लाइब्रेरी (टीएलबी) में भी संकलित किया जा सकता है। TLB फ़ाइलों में बाइनरी मेटाडेटा होता है जिसे TLB में परिभाषित COM प्रकारों का प्रतिनिधित्व करने के लिए भाषा-विशिष्ट निर्माण उत्पन्न करने के लिए विभिन्न भाषा संकलक और रनटाइम वातावरण (जैसे VB, डेल्फी, .NET आदि) द्वारा संसाधित किया जा सकता है। सी ++ के लिए, यह टीएलबी को वापस अपने आईडीएल प्रतिनिधित्व में परिवर्तित कर देगा।
प्रकार पुस्तकालयों में सीओएम प्रकारों का प्रतिनिधित्व करने के लिए मेटाडेटा होता है। इन प्रकारों को [[ Microsoft इंटरफ़ेस परिभाषा भाषा |माइक्रोसॉफ्ट अंतरापृष्ठ परिभाषा भाषा]] (एमएसआईडीएल/आईडीएल) का उपयोग करके वर्णित किया गया है। आईडीएल फाइलें ऑब्जेक्ट-ओरिएंटेड क्लासेस, अंतरापृष्ठ, स्ट्रक्चर्स, एन्यूमरेशन और अन्य यूजर-डिफाइन्ड टाइप्स को भाषा स्वतंत्र तरीके से परिभाषित करती हैं। आईडीएल कुछ अतिरिक्त कीवर्ड जैसे अंतरापृष्ठ और कक्षाओं के संग्रह को परिभाषित करने के लिए अंतरापृष्ठ और लाइब्रेरी के साथ C ++ घोषणाओं के समान है। आईडीएल अतिरिक्त जानकारी प्रदान करने के लिए घोषणा से पहले ब्रैकेटेड विशेषताओं के उपयोग का भी समर्थन करता है, जैसे कि अंतरापृष्ठ GUID और पॉइंटर पैरामीटर और लंबाई फ़ील्ड के बीच संबंध। आईडीएल फाइलें एमआईडीएल कंपाइलर द्वारा संकलित की जाती हैं। C/C++ के लिए, Mआईडीएल कंपाइलर एक कंपाइलर-स्वतंत्र हेडर फ़ाइल बनाता है जिसमें घोषित अंतरापृष्ठ की वर्चुअल मेथड टेबल से मिलान करने के लिए स्ट्रक्चर डेफिनिशन होता है और एक C फाइल जिसमें अंतरापृष्ठ ग्लोबली यूनिक आइडेंटिफायर की घोषणा होती है। एक प्रॉक्सी मॉड्यूल के लिए C++ स्रोत कोड भी Mआईडीएल [[संकलक]] द्वारा उत्पन्न किया जा सकता है। इस प्रॉक्सी में प्रक्रिया से बाहर संचार के लिए डीसीओएम को सक्षम करने के लिए सीओएम कॉल को दूरस्थ प्रक्रिया कॉल में परिवर्तित करने के लिए विधि स्टब्स हैं। आईडीएल फाइलों को एमआईडीएल कंपाइलर द्वारा टाइप लाइब्रेरी (टीएलबी) में भी संकलित किया जा सकता है। TLB फ़ाइलों में बाइनरी मेटाडेटा होता है जिसे TLB में परिभाषित सीओएम प्रकारों का प्रतिनिधित्व करने के लिए भाषा-विशिष्ट निर्माण उत्पन्न करने के लिए विभिन्न भाषा संकलक और रनटाइम वातावरण (जैसे वीबीएक्स, डेल्फी, .नेट आदि) द्वारा संसाधित किया जा सकता है। सी ++ के लिए, यह टीएलबी को वापस अपने आईडीएल प्रतिनिधित्व में परिवर्तित कर देगा।


=== ऑब्जेक्ट फ्रेमवर्क ===
=== ऑब्जेक्ट फ्रेमवर्क ===
क्योंकि COM एक रनटाइम फ्रेमवर्क है, प्रकारों को व्यक्तिगत रूप से पहचाने जाने योग्य और रनटाइम पर निर्दिष्ट करने योग्य होना चाहिए। इसे प्राप्त करने के लिए, विश्व स्तर पर विशिष्ट पहचानकर्ता (GUIDs) का उपयोग किया जाता है। रनटाइम पर पहचान के लिए प्रत्येक COM प्रकार को अपना स्वयं का GUID नामित किया गया है। संकलन समय और रनटाइम दोनों पर COM प्रकारों की जानकारी तक पहुँचने के लिए, COM प्रकार पुस्तकालयों का उपयोग करता है। यह प्रकार पुस्तकालयों के प्रभावी उपयोग के माध्यम से है कि COM वस्तुओं की बातचीत के लिए गतिशील ढांचे के रूप में अपनी क्षमताओं को प्राप्त करता है।
क्योंकि सीओएम एक रनटाइम फ्रेमवर्क है, प्रकारों को व्यक्तिगत रूप से पहचाने जाने योग्य और रनटाइम पर निर्दिष्ट करने योग्य होना चाहिए। इसे प्राप्त करने के लिए, विश्व स्तर पर विशिष्ट पहचानकर्ता (GUIDs) का उपयोग किया जाता है। रनटाइम पर पहचान के लिए प्रत्येक सीओएम प्रकार को अपना स्वयं का GUID नामित किया गया है। संकलन समय और रनटाइम दोनों पर सीओएम प्रकारों की जानकारी तक पहुँचने के लिए, सीओएम प्रकार पुस्तकालयों का उपयोग करता है। यह प्रकार पुस्तकालयों के प्रभावी उपयोग के माध्यम से है कि सीओएम वस्तुओं की बातचीत के लिए गतिशील ढांचे के रूप में अपनी क्षमताओं को प्राप्त करता है।


IDL में निम्नलिखित उदाहरण कोक्लास परिभाषा पर विचार करें:
आईडीएल में निम्नलिखित उदाहरण कोक्लास परिभाषा पर विचार करें:
<syntaxhighlight lang="idl">
<syntaxhighlight lang="idl">
coclass SomeClass {
coclass SomeClass {
Line 112: Line 114:
};
};
</syntaxhighlight>
</syntaxhighlight>
उपरोक्त कोड खंड नामित एक COM वर्ग घोषित करता है <code>SomeClass</code> जो नाम के एक इंटरफ़ेस को लागू करता है <code>ISomeInterface</code>.
उपरोक्त कोड खंड नामित एक सीओएम वर्ग घोषित करता है <code>SomeClass</code> जो नाम के एक अंतरापृष्ठ को लागू करता है <code>ISomeIएनटीerface</code>.


यह वैचारिक रूप से निम्नलिखित C++ वर्ग को परिभाषित करने के बराबर है:
यह वैचारिक रूप से निम्नलिखित C++ वर्ग को परिभाषित करने के बराबर है:
Line 121: Line 123:
};
};
</syntaxhighlight>
</syntaxhighlight>
जहाँ ISomeInterface एक C++ [[शुद्ध आभासी वर्ग]] है (जिसे कभी-कभी एब्स्ट्रैक्ट बेस क्लास भी कहा जाता है)।
जहाँ ISomeIएनटीerface एक C++ [[शुद्ध आभासी वर्ग]] है (जिसे कभी-कभी एब्स्ट्रैक्ट बेस क्लास भी कहा जाता है)।


COM इंटरफेस और कक्षाओं वाली IDL फाइलें टाइप लाइब्रेरी (TLB) फाइलों में संकलित की जाती हैं, जिन्हें बाद में रनटाइम पर क्लाइंट द्वारा पार्स किया जा सकता है, यह निर्धारित करने के लिए कि कौन सा इंटरफेस किसी ऑब्जेक्ट का समर्थन करता है, और किसी ऑब्जेक्ट के इंटरफ़ेस तरीकों को लागू करता है।
सीओएम अंतरापृष्ठ और कक्षाओं वाली आईडीएल फाइलें टाइप लाइब्रेरी (TLB) फाइलों में संकलित की जाती हैं, जिन्हें बाद में रनटाइम पर क्लाइंट द्वारा पार्स किया जा सकता है, यह निर्धारित करने के लिए कि कौन सा अंतरापृष्ठ किसी ऑब्जेक्ट का समर्थन करता है, और किसी ऑब्जेक्ट के अंतरापृष्ठ तरीकों को लागू करता है।


सी ++ में, COM ऑब्जेक्ट्स को तत्काल किया जाता है <code>CoCreateInstance</code> फ़ंक्शन जो क्लास आईडी (CLSID) और इंटरफ़ेस आईडी (IID) को तर्क के रूप में लेता है। की तात्कालिकता <code>SomeClass</code> निम्नानुसार कार्यान्वित किया जा सकता है:
सी ++ में, सीओएम ऑब्जेक्ट्स को तत्काल किया जाता है <code>CoCreateInstance</code> फ़ंक्शन जो क्लास आईडी (CLSID) और अंतरापृष्ठ आईडी (IID) को तर्क के रूप में लेता है। की तात्कालिकता <code>SomeClass</code> निम्नानुसार कार्यान्वित किया जा सकता है:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
ISomeInterface* interface_ptr = NULL;
ISomeInterface* interface_ptr = NULL;
Line 131: Line 133:
                               IID_ISomeInterface, (void**)&interface_ptr);
                               IID_ISomeInterface, (void**)&interface_ptr);
</syntaxhighlight>
</syntaxhighlight>
इस उदाहरण में, COM सब-सिस्टम का उपयोग किसी ऑब्जेक्ट के लिए पॉइंटर प्राप्त करने के लिए किया जाता है जो लागू होता है <code>ISomeInterface</code> इंटरफ़ेस, और coclass CLSID_SomeClass के इस इंटरफ़ेस के विशेष कार्यान्वयन की आवश्यकता है।
इस उदाहरण में, सीओएम सब-सिस्टम का उपयोग किसी ऑब्जेक्ट के लिए पॉइंटर प्राप्त करने के लिए किया जाता है जो लागू होता है <code>ISomeIएनटीerface</code> अंतरापृष्ठ, और coclass CLSID_SomeClass के इस अंतरापृष्ठ के विशेष कार्यान्वयन की आवश्यकता है।


=== संदर्भ गिनती ===
=== संदर्भ गिनती ===
ऑब्जेक्ट जीवनकाल प्रबंधित करने के लिए सभी COM ऑब्जेक्ट संदर्भ गणना का उपयोग करते हैं। सभी COM ऑब्जेक्ट लागू करने वाले अनिवार्य I अज्ञात इंटरफ़ेस में AddRef और रिलीज़ विधियों के माध्यम से क्लाइंट द्वारा संदर्भ संख्या को नियंत्रित किया जाता है। COM ऑब्जेक्ट तब अपनी स्वयं की मेमोरी को मुक्त करने के लिए ज़िम्मेदार होते हैं जब संदर्भ संख्या शून्य हो जाती है। कुछ भाषाएं (जैसे विज़ुअल बेसिक) स्वत: संदर्भ गणना प्रदान करती हैं ताकि COM ऑब्जेक्ट डेवलपर्स को अपने स्रोत कोड में किसी आंतरिक संदर्भ काउंटर को स्पष्ट रूप से बनाए रखने की आवश्यकता न हो। सी ++ में, एक कोडर या तो स्पष्ट संदर्भ गणना कर सकता है या संदर्भ गणनाओं को स्वचालित रूप से प्रबंधित करने के लिए [[ स्मार्ट सूचक ]]्स का उपयोग कर सकता है।
ऑब्जेक्ट जीवनकाल प्रबंधित करने के लिए सभी सीओएम ऑब्जेक्ट संदर्भ गणना का उपयोग करते हैं। सभी सीओएम ऑब्जेक्ट लागू करने वाले अनिवार्य I अज्ञात अंतरापृष्ठ में AddRef और रिलीज़ विधियों के माध्यम से क्लाइंट द्वारा संदर्भ संख्या को नियंत्रित किया जाता है। सीओएम ऑब्जेक्ट तब अपनी स्वयं की मेमोरी को मुक्त करने के लिए ज़िम्मेदार होते हैं जब संदर्भ संख्या शून्य हो जाती है। कुछ भाषाएं (जैसे विज़ुअल बेसिक) स्वत: संदर्भ गणना प्रदान करती हैं ताकि सीओएम ऑब्जेक्ट डेवलपर्स को अपने स्रोत कोड में किसी आंतरिक संदर्भ काउंटर को स्पष्ट रूप से बनाए रखने की आवश्यकता न हो। सी ++ में, एक कोडर या तो स्पष्ट संदर्भ गणना कर सकता है या संदर्भ गणनाओं को स्वचालित रूप से प्रबंधित करने के लिए [[ स्मार्ट सूचक |स्मार्ट सूचक]] ्स का उपयोग कर सकता है।


AddRef को कब कॉल करना है और COM ऑब्जेक्ट्स पर रिलीज़ करना है, इसके लिए निम्नलिखित दिशानिर्देश हैं:
AddRef को कब कॉल करना है और सीओएम ऑब्जेक्ट्स पर रिलीज़ करना है, इसके लिए निम्नलिखित दिशानिर्देश हैं:
* फ़ंक्शंस और विधियाँ जो इंटरफ़ेस संदर्भ लौटाती हैं (वापसी मान या आउट पैरामीटर के माध्यम से) लौटने से पहले लौटाई गई वस्तु की संदर्भ संख्या में वृद्धि होगी।
* फ़ंक्शंस और विधियाँ जो अंतरापृष्ठ संदर्भ लौटाती हैं (वापसी मान या आउट पैरामीटर के माध्यम से) लौटने से पहले लौटाई गई वस्तु की संदर्भ संख्या में वृद्धि होगी।
* पॉइंटर के अधिलेखित होने या दायरे से बाहर होने से पहले इंटरफ़ेस पॉइंटर पर रिलीज़ को कॉल किया जाना चाहिए।
* पॉइंटर के अधिलेखित होने या दायरे से बाहर होने से पहले अंतरापृष्ठ पॉइंटर पर रिलीज़ को कॉल किया जाना चाहिए।
* यदि इंटरफ़ेस संदर्भ सूचक पर प्रतिलिपि बनाई जाती है, तो उस सूचक पर AddRef को कॉल किया जाना चाहिए।
* यदि अंतरापृष्ठ संदर्भ सूचक पर प्रतिलिपि बनाई जाती है, तो उस सूचक पर AddRef को कॉल किया जाना चाहिए।
* AddRef और रिलीज को विशिष्ट इंटरफ़ेस पर कॉल किया जाना चाहिए जिसे संदर्भित किया जा रहा है क्योंकि ऑब्जेक्ट प्रति-इंटरफ़ेस संदर्भ गणनाओं को कार्यान्वित कर सकता है ताकि केवल संदर्भित इंटरफेस के लिए आंतरिक संसाधनों को आवंटित किया जा सके।
* AddRef और रिलीज को विशिष्ट अंतरापृष्ठ पर कॉल किया जाना चाहिए जिसे संदर्भित किया जा रहा है क्योंकि ऑब्जेक्ट प्रति-अंतरापृष्ठ संदर्भ गणनाओं को कार्यान्वित कर सकता है ताकि केवल संदर्भित अंतरापृष्ठ के लिए आंतरिक संसाधनों को आवंटित किया जा सके।


तार पर दूरस्थ वस्तुओं को सभी संदर्भ गणना कॉल नहीं भेजी जाती हैं; एक प्रॉक्सी दूरस्थ वस्तु पर केवल एक संदर्भ रखता है और अपनी स्थानीय संदर्भ संख्या को बनाए रखता है। COM के विकास को सरल बनाने के लिए, Microsoft ने C++ डेवलपर्स के लिए [[सक्रिय टेम्पलेट लाइब्रेरी]] | ATL (एक्टिव टेम्प्लेट लाइब्रेरी) की शुरुआत की। ATL एक उच्च-स्तरीय COM विकास प्रतिमान प्रदान करता है। यह COM क्लाइंट एप्लिकेशन डेवलपर्स को स्मार्ट पॉइंटर ऑब्जेक्ट प्रदान करके सीधे संदर्भ गिनती बनाए रखने की आवश्यकता से भी बचाता है। अन्य पुस्तकालय और भाषाएँ जो COM-जागरूक हैं, उनमें [[Microsoft Foundation Classes]], Visual C++ Compiler COM Support, शामिल हैं।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/h31ekh7e.aspx |title=कंपाइलर कॉम सपोर्ट|publisher=Microsoft|work=MSDN}}</ref> [[वीबीस्क्रिप्ट]], [[विजुअल बेसिक 2005 एक्सप्रेस संस्करण]], ईसीएमएस्क्रिप्ट ([[[[एकमा स्क्रिप्ट]]]]) और [[ बोरलैंड डेल्फी ]]।
तार पर दूरस्थ वस्तुओं को सभी संदर्भ गणना कॉल नहीं भेजी जाती हैं; एक प्रॉक्सी दूरस्थ वस्तु पर केवल एक संदर्भ रखता है और अपनी स्थानीय संदर्भ संख्या को बनाए रखता है। सीओएम के विकास को सरल बनाने के लिए, माइक्रोसॉफ्ट ने C++ डेवलपर्स के लिए [[सक्रिय टेम्पलेट लाइब्रेरी]] | ATL (एक्टिव टेम्प्लेट लाइब्रेरी) के प्रारम्भ की। ATL एक उच्च-स्तरीय सीओएम विकास प्रतिमान प्रदान करता है। यह सीओएम क्लाइंट एप्लिकेशन डेवलपर्स को स्मार्ट पॉइंटर ऑब्जेक्ट प्रदान करके सीधे संदर्भ गिनती बनाए रखने की आवश्यकता से भी बचाता है। अन्य पुस्तकालय और भाषाएँ जो सीओएम-जागरूक हैं, उनमें [[Microsoft Foundation Classes|माइक्रोसॉफ्ट Foundation Classes]], Visual C++ सीओएमpiler सीओएम Support, सम्मिलित हैं।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/h31ekh7e.aspx |title=कंपाइलर कॉम सपोर्ट|publisher=Microsoft|work=MSDN}}</ref> [[वीबीस्क्रिप्ट]], [[विजुअल बेसिक 2005 एक्सप्रेस संस्करण]], ईसीएमएस्क्रिप्ट ([[[[एकमा स्क्रिप्ट]]]]) और [[ बोरलैंड डेल्फी |बोरलैंड डेल्फी]] ।


=== प्रोग्रामिंग ===
=== प्रोग्रामिंग ===
COM एक [[भाषा-स्वतंत्र विनिर्देश]] बाइनरी मानक है जिसे किसी भी प्रोग्रामिंग भाषा में विकसित किया जा सकता है जो इसके बाइनरी परिभाषित डेटा प्रकारों और इंटरफेस को समझने और कार्यान्वित करने में सक्षम है। COM कार्यान्वयन COM वातावरण में प्रवेश करने और छोड़ने, COM ऑब्जेक्ट्स को तत्काल और संदर्भ-गणना करने, समर्थित इंटरफेस के लिए ऑब्जेक्ट क्वेरी करने, साथ ही साथ त्रुटियों को संभालने के लिए ज़िम्मेदार हैं। माइक्रोसॉफ्ट विज़ुअल सी ++ कंपाइलर सी ++ एट्रिब्यूट्स के रूप में संदर्भित सी ++ भाषा के एक्सटेंशन का समर्थन करता है।<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-US/library/f520z3b3.aspx C++ Attributes Reference]</ref> ये एक्सटेंशन COM विकास को आसान बनाने और C++ में COM सर्वरों को लागू करने के लिए आवश्यक [[बॉयलरप्लेट कोड]] को हटाने के लिए डिज़ाइन किए गए हैं।<ref>MSDN Magazine: [http://msdn.microsoft.com/en-us/magazine/cc301337.aspx C++ Attributes: Make COM Programming a Breeze with New Feature in Visual Studio .NET]</ref>
सीओएम एक [[भाषा-स्वतंत्र विनिर्देश]] बाइनरी मानक है जिसे किसी भी प्रोग्रामिंग भाषा में विकसित किया जा सकता है जो इसके बाइनरी परिभाषित डेटा प्रकारों और अंतरापृष्ठ को समझने और कार्यान्वित करने में सक्षम है। सीओएम कार्यान्वयन सीओएम वातावरण में प्रवेश करने और छोड़ने, सीओएम ऑब्जेक्ट्स को तत्काल और संदर्भ-गणना करने, समर्थित अंतरापृष्ठ के लिए ऑब्जेक्ट क्वेरी करने, साथ ही साथ त्रुटियों को संभालने के लिए ज़िम्मेदार हैं। माइक्रोसॉफ्ट विज़ुअल सी ++ कंपाइलर सी ++ एट्रिब्यूट्स के रूप में संदर्भित सी ++ भाषा के एक्सटेंशन का समर्थन करता है।<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-US/library/f520z3b3.aspx C++ Attributes Reference]</ref> ये एक्सटेंशन सीओएम विकास को आसान बनाने और C++ में सीओएम सर्वरों को लागू करने के लिए आवश्यक [[बॉयलरप्लेट कोड]] को हटाने के लिए डिज़ाइन किए गए हैं।<ref>MSDN Magazine: [http://msdn.microsoft.com/en-us/magazine/cc301337.aspx C++ Attributes: Make COM Programming a Breeze with New Feature in Visual Studio .NET]</ref>




=== रजिस्ट्री उपयोग ===
=== रजिस्ट्री उपयोग ===
विंडोज में, COM क्लासेस, इंटरफेस और टाइप लाइब्रेरी को GUID द्वारा विंडोज रजिस्ट्री में सूचीबद्ध किया गया है, HKEY_CLASSES_ROOT\CLSID के तहत कक्षाओं के लिए और HKEY_CLASSES_ROOT\Interface इंटरफेस के लिए। COM लायब्रेरी प्रत्येक COM ऑब्जेक्ट या किसी दूरस्थ सेवा के लिए नेटवर्क स्थान के लिए या तो सही स्थानीय लायब्रेरी का पता लगाने के लिए रजिस्ट्री का उपयोग करें।
विंडोज में, सीओएम क्लासेस, अंतरापृष्ठ और टाइप लाइब्रेरी को GUID द्वारा विंडोज रजिस्ट्री में सूचीबद्ध किया गया है, HKEY_CLASSES_ROOT\CLSID के तहत कक्षाओं के लिए और HKEY_CLASSES_ROOT\Iएनटीerface अंतरापृष्ठ के लिए। सीओएम लायब्रेरी प्रत्येक सीओएम ऑब्जेक्ट या किसी दूरस्थ सेवा के लिए नेटवर्क स्थान के लिए या तो सही स्थानीय लायब्रेरी का पता लगाने के लिए रजिस्ट्री का उपयोग करें।


=== पंजीकरण मुक्त कॉम ===
=== पंजीकरण मुक्त कॉम ===
पंजीकरण-मुक्त COM (RegFree COM) [[Windows XP]] के साथ शुरू की गई एक तकनीक है जो घटक ऑब्जेक्ट मॉडल (COM) सॉफ़्टवेयर घटक को सक्रियण [[ मेटा डेटा ]] और CLSID को संग्रहीत करने की अनुमति देती है (<code>[[Class (computing)|Class]] ID</code>) Windows रजिस्ट्री का उपयोग किए बिना घटक के लिए। इसके बजाय, घटक में लागू वर्गों के मेटाडेटा और सीएलएसआईडी को एक [[मेनिफेस्ट (सीएलआई)]] (एक्सएमएल का उपयोग करके वर्णित) में घोषित किया जाता है, या तो निष्पादन योग्य संसाधन के रूप में या घटक के साथ स्थापित एक अलग फ़ाइल के रूप में संग्रहीत किया जाता है।<ref name="msdndocs">{{cite web | url = http://msdn.microsoft.com/en-us/library/aa374219(VS.85).aspx | title = विधानसभा प्रकट| publisher = [[MSDN]] | access-date = 2009-11-05}}</ref> यह एक ही घटक के कई संस्करणों को अलग-अलग निर्देशिकाओं में स्थापित करने की अनुमति देता है, जो उनके स्वयं के प्रकटीकरण के साथ-साथ XCOPY परिनियोजन द्वारा वर्णित है।<ref name="msdnmag">{{cite web | url = http://msdn.microsoft.com/en-us/magazine/cc188708.aspx | title = क्लिकऑन और पंजीकरण-मुक्त COM के साथ ऐप परिनियोजन को सरल बनाएं| author = Dave Templin | publisher = [[MSDN]] Magazine | access-date = 2008-04-22}}</ref> इस तकनीक में EXE COM सर्वरों के लिए सीमित समर्थन है<ref>{{cite web | url = https://stackoverflow.com/questions/2369181/how-to-use-an-out-of-process-com-server-without-its-tlb-file | title = किसी आउट-ऑफ़-प्रोसेस COM सर्वर का उसकी tlb फ़ाइल के बिना उपयोग कैसे करें| access-date = 2011-04-16}}</ref> और सिस्टम-व्यापी घटकों जैसे [[Microsoft डेटा एक्सेस घटक]], [[MSXML]], DirectX या Internet Explorer के लिए उपयोग नहीं किया जा सकता है।
पंजीकरण-मुक्त सीओएम (RegFree सीओएम) [[Windows XP|विंडोज़ XP]] के साथ प्रारम्भ की गई एक तकनीक है जो घटक ऑब्जेक्ट मॉडल (सीओएम) सॉफ़्टवेयर घटक को सक्रियण [[ मेटा डेटा |मेटा डेटा]] और CLSID को संग्रहीत करने की अनुमति देती है (<code>[[Class (computing)|Class]] ID</code>) विंडोज़ रजिस्ट्री का उपयोग किए बिना घटक के लिए। इसके बजाय, घटक में लागू वर्गों के मेटाडेटा और सीएलएसआईडी को एक [[मेनिफेस्ट (सीएलआई)]] (एक्सएमएल का उपयोग करके वर्णित) में घोषित किया जाता है, या तो निष्पादन योग्य संसाधन के रूप में या घटक के साथ स्थापित एक अलग फ़ाइल के रूप में संग्रहीत किया जाता है।<ref name="msdndocs">{{cite web | url = http://msdn.microsoft.com/en-us/library/aa374219(VS.85).aspx | title = विधानसभा प्रकट| publisher = [[MSDN]] | access-date = 2009-11-05}}</ref> यह एक ही घटक के कई संस्करणों को अलग-अलग निर्देशिकाओं में स्थापित करने की अनुमति देता है, जो उनके स्वयं के प्रकटीकरण के साथ-साथ XCOPY परिनियोजन द्वारा वर्णित है।<ref name="msdnmag">{{cite web | url = http://msdn.microsoft.com/en-us/magazine/cc188708.aspx | title = क्लिकऑन और पंजीकरण-मुक्त COM के साथ ऐप परिनियोजन को सरल बनाएं| author = Dave Templin | publisher = [[MSDN]] Magazine | access-date = 2008-04-22}}</ref> इस तकनीक में EXE सीओएम सर्वरों के लिए सीमित समर्थन है<ref>{{cite web | url = https://stackoverflow.com/questions/2369181/how-to-use-an-out-of-process-com-server-without-its-tlb-file | title = किसी आउट-ऑफ़-प्रोसेस COM सर्वर का उसकी tlb फ़ाइल के बिना उपयोग कैसे करें| access-date = 2011-04-16}}</ref> और सिस्टम-व्यापी घटकों जैसे [[Microsoft डेटा एक्सेस घटक|माइक्रोसॉफ्ट डेटा एक्सेस घटक]], [[MSXML|MSएक्सएमएल]], डायरेक्टX या Iएनटीerनेट Explorer के लिए उपयोग नहीं किया जा सकता है।


एप्लिकेशन लोड होने के दौरान, विंडोज लोडर मेनिफेस्ट की खोज करता है।<ref name="isoconcept">{{cite web | url=https://msdn.microsoft.com/en-us/library/ms235531(v=vs.140).aspx | title = पृथक अनुप्रयोगों और साथ-साथ असेंबलियों की अवधारणा| publisher = [[MSDN]] | access-date = 2016-02-05}}</ref> यदि यह मौजूद है, तो लोडर इससे सक्रियण संदर्भ में जानकारी जोड़ता है।<ref name="msdnmag"/>जब COM क्लास फ़ैक्टरी किसी क्लास को इंस्टेंट करने की कोशिश करती है, तो सक्रियण संदर्भ को पहले यह देखने के लिए चेक किया जाता है कि क्या CLSID के लिए कार्यान्वयन पाया जा सकता है। केवल अगर लुकअप विफल हो जाता है, तो Windows रजिस्ट्री स्कैन की जाती है।<ref name="msdnmag"/>
एप्लिकेशन लोड होने के दौरान, विंडोज लोडर मेनिफेस्ट की खोज करता है।<ref name="isoconcept">{{cite web | url=https://msdn.microsoft.com/en-us/library/ms235531(v=vs.140).aspx | title = पृथक अनुप्रयोगों और साथ-साथ असेंबलियों की अवधारणा| publisher = [[MSDN]] | access-date = 2016-02-05}}</ref> यदि यह मौजूद है, तो लोडर इससे सक्रियण संदर्भ में जानकारी जोड़ता है।<ref name="msdnmag"/>जब सीओएम क्लास फ़ैक्टरी किसी क्लास को इंस्टेंट करने की कोशिश करती है, तो सक्रियण संदर्भ को पहले यह देखने के लिए चेक किया जाता है कि क्या CLSID के लिए कार्यान्वयन पाया जा सकता है। केवल अगर लुकअप विफल हो जाता है, तो विंडोज़ रजिस्ट्री स्कैन की जाती है।<ref name="msdnmag"/>




=== मैन्युअल रूप से COM ऑब्जेक्ट्स को इंस्टेंट करना ===
=== मैन्युअल रूप से सीओएम ऑब्जेक्ट्स को इंस्टेंट करना ===
डायनेमिक-लिंक लाइब्रेरी फ़ाइल और ऑब्जेक्ट के [[GUID]] के पथ को देखते हुए COM ऑब्जेक्ट मैन्युअल रूप से भी बनाए जा सकते हैं। इसके लिए DLL या GUID को सिस्टम रजिस्ट्री में पंजीकृत करने की आवश्यकता नहीं है, और मेनिफेस्ट फ़ाइलों का उपयोग नहीं करता है। एक COM DLL DllGetClassObject नामक फ़ंक्शन निर्यात करता है। वांछित GUID और IID_IClassFactory के साथ DllGetClassObject को कॉल करना फ़ैक्टरी (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का एक उदाहरण प्रदान करता है। फ़ैक्टरी ऑब्जेक्ट में एक CreateInstance विधि है, जो एक इंटरफ़ेस GUID दिए गए ऑब्जेक्ट के उदाहरण बना सकती है।<ref>{{cite web|last1=Arkhipov|first1=Mikhail|title=पंजीकरण मुक्त कॉम|url=https://blogs.msdn.microsoft.com/mikhailarkhipov/2005/04/01/registration-free-com/|website=MSDN Blogs|access-date=29 April 2016|date=1 April 2005}}</ref> पंजीकृत COM घटकों के उदाहरण बनाते समय आंतरिक रूप से उपयोग की जाने वाली यह वही प्रक्रिया है।<ref>{{cite web|title=DllGetClassObject प्रवेश बिंदु (COM)|url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms680760%28v=vs.85%29.aspx|website=MSDN|quote=If a call to the CoGetClassObject function finds the class object that is to be loaded in a DLL, CoGetClassObject uses the DLL's exported DllGetClassObject function.}}</ref>
डायनेमिक-लिंक लाइब्रेरी फ़ाइल और ऑब्जेक्ट के [[GUID]] के पथ को देखते हुए सीओएम ऑब्जेक्ट मैन्युअल रूप से भी बनाए जा सकते हैं। इसके लिए डीएलएल या GUID को सिस्टम रजिस्ट्री में पंजीकृत करने की आवश्यकता नहीं है, और मेनिफेस्ट फ़ाइलों का उपयोग नहीं करता है। एक सीओएम डीएलएल डीएलएलGetClassObject नामक फ़ंक्शन निर्यात करता है। वांछित GUID और IID_IClassFactory के साथ डीएलएलGetClassObject को कॉल करना फ़ैक्टरी (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का एक उदाहरण प्रदान करता है। फ़ैक्टरी ऑब्जेक्ट में एक CreateInstance विधि है, जो एक अंतरापृष्ठ GUID दिए गए ऑब्जेक्ट के उदाहरण बना सकती है।<ref>{{cite web|last1=Arkhipov|first1=Mikhail|title=पंजीकरण मुक्त कॉम|url=https://blogs.msdn.microsoft.com/mikhailarkhipov/2005/04/01/registration-free-com/|website=MSDN Blogs|access-date=29 April 2016|date=1 April 2005}}</ref> पंजीकृत सीओएम घटकों के उदाहरण बनाते समय आंतरिक रूप से उपयोग की जाने वाली यह वही प्रक्रिया है।<ref>{{cite web|title=DllGetClassObject प्रवेश बिंदु (COM)|url=https://msdn.microsoft.com/en-us/library/windows/desktop/ms680760%28v=vs.85%29.aspx|website=MSDN|quote=If a call to the CoGetClassObject function finds the class object that is to be loaded in a DLL, CoGetClassObject uses the DLL's exported DllGetClassObject function.}}</ref>
यदि बनाया गया COM ऑब्जेक्ट जेनेरिक CoCreateInstance API का उपयोग करके किसी अन्य COM ऑब्जेक्ट को तुरंत चालू करता है, तो यह रजिस्ट्री या मेनिफेस्ट फ़ाइलों का उपयोग करके सामान्य सामान्य तरीके से ऐसा करने का प्रयास करेगा। लेकिन यह आंतरिक वस्तुओं (जो बिल्कुल भी पंजीकृत नहीं हो सकता है) बना सकता है, और अपने स्वयं के निजी ज्ञान का उपयोग करते हुए, उन्हें इंटरफेस के संदर्भ सौंप सकता है।
यदि बनाया गया सीओएम ऑब्जेक्ट जेनेरिक CoCreateInstance एपीआई का उपयोग करके किसी अन्य सीओएम ऑब्जेक्ट को तुरंत चालू करता है, तो यह रजिस्ट्री या मेनिफेस्ट फ़ाइलों का उपयोग करके सामान्य सामान्य तरीके से ऐसा करने का प्रयास करेगा। लेकिन यह आंतरिक वस्तुओं (जो बिल्कुल भी पंजीकृत नहीं हो सकता है) बना सकता है, और अपने स्वयं के निजी ज्ञान का उपयोग करते हुए, उन्हें अंतरापृष्ठ के संदर्भ सौंप सकता है।


=== प्रक्रिया और नेटवर्क पारदर्शिता ===
=== प्रक्रिया और नेटवर्क पारदर्शिता ===
COM ऑब्जेक्ट्स को पारदर्शी रूप से तत्काल और एक ही प्रक्रिया (इन-प्रोसेस) के भीतर, प्रक्रिया सीमाओं (आउट-ऑफ-प्रोसेस), या दूरस्थ रूप से नेटवर्क (DCOM) पर संदर्भित किया जा सकता है। आउट-ऑफ-प्रोसेस और रिमोट ऑब्जेक्ट्स विधि कॉल को क्रमबद्ध करने और प्रक्रिया या नेटवर्क सीमाओं पर मान वापस करने के लिए [[क्रमबद्धता]] का उपयोग करते हैं। यह मार्शलिंग क्लाइंट के लिए अदृश्य है, जो ऑब्जेक्ट को एक्सेस करता है जैसे कि यह एक स्थानीय इन-प्रोसेस ऑब्जेक्ट था।
सीओएम ऑब्जेक्ट्स को पारदर्शी रूप से तत्काल और एक ही प्रक्रिया (इन-प्रोसेस) के भीतर, प्रक्रिया सीमाओं (आउट-ऑफ-प्रोसेस), या दूरस्थ रूप से नेटवर्क (डीसीओएम) पर संदर्भित किया जा सकता है। आउट-ऑफ-प्रोसेस और रिमोट ऑब्जेक्ट्स विधि कॉल को क्रमबद्ध करने और प्रक्रिया या नेटवर्क सीमाओं पर मान वापस करने के लिए [[क्रमबद्धता]] का उपयोग करते हैं। यह मार्शलिंग क्लाइंट के लिए अदृश्य है, जो ऑब्जेक्ट को एक्सेस करता है जैसे कि यह एक स्थानीय इन-प्रोसेस ऑब्जेक्ट था।


=== थ्रेडिंग ===
=== थ्रेडिंग ===
COM में, थ्रेडिंग को एक अवधारणा के माध्यम से संबोधित किया जाता है जिसे अपार्टमेंट कहा जाता है।<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-us/library/windows/desktop/ms693344.aspx Processes, Threads, and Apartments]</ref> एक व्यक्तिगत COM ऑब्जेक्ट बिल्कुल एक अपार्टमेंट में रहता है, जो सिंगल-थ्रेडेड या मल्टी-थ्रेडेड हो सकता है। COM में तीन प्रकार के अपार्टमेंट हैं: [[सिंगल थ्रेडिंग]] | सिंगल-थ्रेडेड अपार्टमेंट (STA), मल्टी-थ्रेडेड अपार्टमेंट (MTA) और थ्रेड न्यूट्रल अपार्टमेंट (NA)। प्रत्येक अपार्टमेंट एक तंत्र का प्रतिनिधित्व करता है जिससे किसी वस्तु की आंतरिक स्थिति को कई धागों में सिंक्रनाइज़ किया जा सकता है। एक प्रक्रिया में कई COM ऑब्जेक्ट शामिल हो सकते हैं, जिनमें से कुछ STA का उपयोग कर सकते हैं और अन्य MTA का उपयोग कर सकते हैं। COM ऑब्जेक्ट तक पहुँचने वाले सभी थ्रेड समान रूप से एक अपार्टमेंट में रहते हैं। COM ऑब्जेक्ट्स और थ्रेड्स के लिए अपार्टमेंट का चुनाव रन-टाइम पर निर्धारित होता है, और इसे बदला नहीं जा सकता।
सीओएम में, थ्रेडिंग को एक अवधारणा के माध्यम से संबोधित किया जाता है जिसे अपार्टमेंट कहा जाता है।<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-us/library/windows/desktop/ms693344.aspx Processes, Threads, and Apartments]</ref> एक व्यक्तिगत सीओएम ऑब्जेक्ट बिल्कुल एक अपार्टमेंट में रहता है, जो सिंगल-थ्रेडेड या मल्टी-थ्रेडेड हो सकता है। सीओएम में तीन प्रकार के अपार्टमेंट हैं: [[सिंगल थ्रेडिंग]] | सिंगल-थ्रेडेड अपार्टमेंट (STA), मल्टी-थ्रेडेड अपार्टमेंट (MTA) और थ्रेड न्यूट्रल अपार्टमेंट (NA)। प्रत्येक अपार्टमेंट एक तंत्र का प्रतिनिधित्व करता है जिससे किसी वस्तु की आंतरिक स्थिति को कई धागों में सिंक्रनाइज़ किया जा सकता है। एक प्रक्रिया में कई सीओएम ऑब्जेक्ट सम्मिलित हो सकते हैं, जिनमें से कुछ STA का उपयोग कर सकते हैं और अन्य MTA का उपयोग कर सकते हैं। सीओएम ऑब्जेक्ट तक पहुँचने वाले सभी थ्रेड समान रूप से एक अपार्टमेंट में रहते हैं। सीओएम ऑब्जेक्ट्स और थ्रेड्स के लिए अपार्टमेंट का चुनाव रन-टाइम पर निर्धारित होता है, और इसे बदला नहीं जा सकता।


{| class="wikitable"
{| class="wikitable"
Line 171: Line 173:
! अपार्टमेंट का प्रकार !! विवरण
! अपार्टमेंट का प्रकार !! विवरण
|-
|-
| '''सिंगल-थ्रेडेड अपार्टमेंट'''<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-us/library/windows/desktop/ms680112.aspx सिंगल-थ्रेडेड अपार्टमेंट]</ref> ( ''STA''), (ThreadingModel=''Apartment'')|| वस्तु के तरीकों को निष्पादित करने के लिए एक एकल धागा समर्पित है। ऐसी व्यवस्था में, अपार्टमेंट के बाहर थ्रेड्स से विधि कॉल [[मार्शलिंग (कंप्यूटर विज्ञान)|marshalled]] हैं और स्वचालित रूप से सिस्टम द्वारा कतारबद्ध हैं (एक मानक विंडोज संदेश कतार के माध्यम से)। इस प्रकार, COM रन-टाइम यह सुनिश्चित करने के लिए स्वत: सिंक्रनाइज़ेशन प्रदान करता है कि किसी ऑब्जेक्ट की प्रत्येक विधि कॉल हमेशा दूसरे को लागू करने से पहले पूरा करने के लिए निष्पादित की जाती है। इसलिए डेवलपर को थ्रेड लॉकिंग या दौड़ की स्थिति के बारे में चिंता करने की ज़रूरत नहीं है।
| '''सिंगल-थ्रेडेड अपार्टमेंट'''<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-us/library/windows/desktop/ms680112.aspx सिंगल-थ्रेडेड अपार्टमेंट]</ref> ( ''STA''), (ThreadingModel=''Apartmeएनटी'')|| वस्तु के तरीकों को निष्पादित करने के लिए एक एकल धागा समर्पित है। ऐसी व्यवस्था में, अपार्टमेंट के बाहर थ्रेड्स से विधि कॉल [[मार्शलिंग (कंप्यूटर विज्ञान)|marshalled]] हैं और स्वचालित रूप से सिस्टम द्वारा कतारबद्ध हैं (एक मानक विंडोज संदेश कतार के माध्यम से)। इस प्रकार, सीओएम रन-टाइम यह सुनिश्चित करने के लिए स्वत: सिंक्रनाइज़ेशन प्रदान करता है कि किसी ऑब्जेक्ट की प्रत्येक विधि कॉल हमेशा दूसरे को लागू करने से पहले पूरा करने के लिए निष्पादित की जाती है। इसलिए डेवलपर को थ्रेड लॉकिंग या दौड़ की स्थिति के बारे में चिंता करने की ज़रूरत नहीं है।
|-
|-
| '''मल्टी-थ्रेडेड अपार्टमेंट'''<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421.aspx मल्टीथ्रेडेड अपार्टमेंट्स]</ref> ('' एमटीए''), (थ्रेडिंगमॉडल=''फ्री'') || COM रन-टाइम कोई सिंक्रनाइज़ेशन प्रदान नहीं करता है, और एकाधिक थ्रेड्स को COM ऑब्जेक्ट को एक साथ कॉल करने की अनुमति है। इसलिए COM ऑब्जेक्ट्स को दौड़ की स्थिति उत्पन्न करने से एकाधिक धागे से एक साथ पहुंच को रोकने के लिए अपना स्वयं का सिंक्रनाइज़ेशन करने की आवश्यकता होती है। किसी STA में किसी थ्रेड से किसी MTA ऑब्जेक्ट के लिए कॉल भी मार्शल किए जाते हैं।
| '''मल्टी-थ्रेडेड अपार्टमेंट'''<ref>Microsoft MSDN: [http://msdn.microsoft.com/en-us/library/windows/desktop/ms693421.aspx मल्टीथ्रेडेड अपार्टमेंट्स]</ref> ('' एमटीए''), (थ्रेडिंगमॉडल=''फ्री'') || सीओएम रन-टाइम कोई सिंक्रनाइज़ेशन प्रदान नहीं करता है, और एकाधिक थ्रेड्स को सीओएम ऑब्जेक्ट को एक साथ कॉल करने की अनुमति है। इसलिए सीओएम ऑब्जेक्ट्स को दौड़ की स्थिति उत्पन्न करने से एकाधिक धागे से एक साथ पहुंच को रोकने के लिए अपना स्वयं का सिंक्रनाइज़ेशन करने की आवश्यकता होती है। किसी STA में किसी थ्रेड से किसी MTA ऑब्जेक्ट के लिए कॉल भी मार्शल किए जाते हैं।
|-
|-
| गतिशील रूप से निर्धारित अपार्टमेंट (ThreadingModel=''Both'') || ''दोनों'' अपार्टमेंट मोड में, सर्वर कॉलिंग थ्रेड के अपार्टमेंट प्रकार से मिलान करने के लिए वस्तु निर्माण पर STA या MTA का स्वतः चयन करता है।<ref>Microsoft MSDN: [http://msdn.microsoft.com/en- us/library/ms809971.aspx COM थ्रेडिंग मॉडल को समझना और उपयोग करना]</ref> यह ओवरहेड मार्शलिंग से बचने के लिए उपयोगी हो सकता है जब MTA सर्वर को STA थ्रेड द्वारा एक्सेस किया जाता है।
| गतिशील रूप से निर्धारित अपार्टमेंट (ThreadingModel=''Both'') || ''दोनों'' अपार्टमेंट मोड में, सर्वर कॉलिंग थ्रेड के अपार्टमेंट प्रकार से मिलान करने के लिए वस्तु निर्माण पर STA या MTA का स्वतः चयन करता है।<ref>Microsoft MSDN: [http://msdn.microsoft.com/en- us/library/ms809971.aspx COM थ्रेडिंग मॉडल को समझना और उपयोग करना]</ref> यह ओवरहेड मार्शलिंग से बचने के लिए उपयोगी हो सकता है जब MTA सर्वर को STA थ्रेड द्वारा एक्सेस किया जाता है।
Line 179: Line 181:
| '''थ्रेड न्यूट्रल अपार्टमेंट''' (''एनए''), (थ्रेडिंगमॉडल=''न्यूट्रल'')|| बिना किसी नियत धागे के एक विशेष अपार्टमेंट। जब एक एसटीए या एमटीए थ्रेड एक एनए ऑब्जेक्ट को उसी प्रक्रिया में कॉल करता है, तो कॉलिंग थ्रेड अस्थायी रूप से अपना अपार्टमेंट छोड़ देता है और बिना किसी थ्रेड स्विचिंग के एनए में सीधे कोड निष्पादित करता है।<ref>Codeguru: [http://www.codeguru.com /cpp/com-tech/activex/apts/article.php/c5529/Understanding-COM-Apartments-Part-I.htm COM अपार्टमेंट्स को समझना]</ref> इसलिए, कोई भी कुशल इंटर-अपार्टमेंट विधि के लिए NA को एक अनुकूलन के रूप में सोच सकता है कॉल।
| '''थ्रेड न्यूट्रल अपार्टमेंट''' (''एनए''), (थ्रेडिंगमॉडल=''न्यूट्रल'')|| बिना किसी नियत धागे के एक विशेष अपार्टमेंट। जब एक एसटीए या एमटीए थ्रेड एक एनए ऑब्जेक्ट को उसी प्रक्रिया में कॉल करता है, तो कॉलिंग थ्रेड अस्थायी रूप से अपना अपार्टमेंट छोड़ देता है और बिना किसी थ्रेड स्विचिंग के एनए में सीधे कोड निष्पादित करता है।<ref>Codeguru: [http://www.codeguru.com /cpp/com-tech/activex/apts/article.php/c5529/Understanding-COM-Apartments-Part-I.htm COM अपार्टमेंट्स को समझना]</ref> इसलिए, कोई भी कुशल इंटर-अपार्टमेंट विधि के लिए NA को एक अनुकूलन के रूप में सोच सकता है कॉल।
|}
|}
थ्रेड्स और ऑब्जेक्ट जो एक ही अपार्टमेंट से संबंधित हैं, समान थ्रेड एक्सेस नियमों का पालन करते हैं। मेथड कॉल्स जो एक ही अपार्टमेंट के अंदर की जाती हैं इसलिए सीधे COM की सहायता के बिना की जाती हैं। अपार्टमेंट में किए गए मेथड कॉल मार्शलिंग के माध्यम से प्राप्त किए जाते हैं। इसके लिए प्रॉक्सी और स्टब्स के उपयोग की आवश्यकता होती है।
थ्रेड्स और ऑब्जेक्ट जो एक ही अपार्टमेंट से संबंधित हैं, समान थ्रेड एक्सेस नियमों का पालन करते हैं। मेथड कॉल्स जो एक ही अपार्टमेंट के अंदर की जाती हैं इसलिए सीधे सीओएम की सहायता के बिना की जाती हैं। अपार्टमेंट में किए गए मेथड कॉल मार्शलिंग के माध्यम से प्राप्त किए जाते हैं। इसके लिए प्रॉक्सी और स्टब्स के उपयोग की आवश्यकता होती है।


[[Category:All Wikipedia articles written in American English]]
[[Category:All Wikipedia articles written in American English]]
Line 193: Line 195:


== आलोचना ==
== आलोचना ==
चूंकि COM का कार्यान्वयन काफी जटिल है, प्रोग्रामर कुछ प्लंबिंग मुद्दों से विचलित हो सकते हैं।
चूंकि सीओएम का कार्यान्वयन काफी जटिल है, प्रोग्रामर कुछ प्लंबिंग मुद्दों से विचलित हो सकते हैं।


=== संदेश पम्पिंग ===
=== संदेश पम्पिंग ===
जब एक STA को इनिशियलाइज़ किया जाता है तो यह एक छिपी हुई विंडो बनाता है जिसका उपयोग इंटर-अपार्टमेंट और इंटर-प्रोसेस मैसेज रूटिंग के लिए किया जाता है। इस विंडो की संदेश कतार नियमित रूप से पंप होनी चाहिए। इस निर्माण को एक [[संदेश पंप]] के रूप में जाना जाता है। विंडोज के पुराने संस्करणों पर, ऐसा करने में विफलता के कारण सिस्टम-वाइड गतिरोध हो सकता है। यह समस्या कुछ विंडोज़ एपीआई द्वारा जटिल है जो COM को उनके कार्यान्वयन के हिस्से के रूप में प्रारंभ करते हैं, जो कार्यान्वयन विवरण के रिसाव का कारण बनता है।
जब एक STA को इनिशियलाइज़ किया जाता है तो यह एक छिपी हुई विंडो बनाता है जिसका उपयोग इंटर-अपार्टमेंट और इंटर-प्रोसेस मैसेज रूटिंग के लिए किया जाता है। इस विंडो की संदेश कतार नियमित रूप से पंप होनी चाहिए। इस निर्माण को एक [[संदेश पंप]] के रूप में जाना जाता है। विंडोज के पुराने संस्करणों पर, ऐसा करने में विफलता के कारण सिस्टम-वाइड गतिरोध हो सकता है। यह समस्या कुछ विंडोज़ एपीआई द्वारा जटिल है जो सीओएम को उनके कार्यान्वयन के हिस्से के रूप में प्रारंभ करते हैं, जो कार्यान्वयन विवरण के रिसाव का कारण बनता है।


=== संदर्भ गिनती ===
=== संदर्भ गिनती ===
यदि दो या दो से अधिक ऑब्जेक्ट्स [[ वृत्तीय संदर्भ ]] हैं, तो COM के भीतर रेफरेंस काउंटिंग में समस्या हो सकती है। किसी एप्लिकेशन के डिज़ाइन को इसे ध्यान में रखना चाहिए ताकि वस्तुओं को अनाथ न छोड़ा जाए। यदि COM ईवेंट सिंक मॉडल का उपयोग किया जाता है, तो ऑब्जेक्ट को सक्रिय संदर्भ गणनाओं के साथ भी छोड़ा जा सकता है। चूँकि घटना को शुरू करने वाली वस्तु को घटना पर प्रतिक्रिया करने वाली वस्तु के संदर्भ की आवश्यकता होती है, बाद की संदर्भ संख्या कभी भी शून्य तक नहीं पहुँचेगी। संदर्भ चक्र आमतौर पर या तो आउट-ऑफ़-बैंड टर्मिनेशन या स्प्लिट आइडेंटिटी का उपयोग करके तोड़ा जाता है। आउट-ऑफ़-बैंड टर्मिनेशन तकनीक में, एक वस्तु एक विधि को उजागर करती है, जिसे जब कॉल किया जाता है, तो उसे अन्य वस्तुओं के संदर्भों को छोड़ने के लिए मजबूर करता है, जिससे चक्र टूट जाता है। विभाजन पहचान तकनीक में, एक एकल कार्यान्वयन दो अलग-अलग COM ऑब्जेक्ट्स (जिन्हें पहचान के रूप में भी जाना जाता है) को उजागर करता है। यह एक संदर्भ चक्र को रोकने, COM ऑब्जेक्ट्स के बीच एक [[कमजोर संदर्भ]] बनाता है।
यदि दो या दो से अधिक ऑब्जेक्ट्स [[ वृत्तीय संदर्भ |वृत्तीय संदर्भ]] हैं, तो सीओएम के भीतर रेफरेंस काउंटिंग में समस्या हो सकती है। किसी एप्लिकेशन के डिज़ाइन को इसे ध्यान में रखना चाहिए ताकि वस्तुओं को अनाथ न छोड़ा जाए। यदि सीओएम ईवेंट सिंक मॉडल का उपयोग किया जाता है, तो ऑब्जेक्ट को सक्रिय संदर्भ गणनाओं के साथ भी छोड़ा जा सकता है। चूँकि घटना को प्रारम्भ करने वाली वस्तु को घटना पर प्रतिक्रिया करने वाली वस्तु के संदर्भ की आवश्यकता होती है, बाद की संदर्भ संख्या कभी भी शून्य तक नहीं पहुँचेगी। संदर्भ चक्र सामान्यतः या तो आउट-ऑफ़-बैंड टर्मिनेशन या स्प्लिट आइडेंटिटी का उपयोग करके तोड़ा जाता है। आउट-ऑफ़-बैंड टर्मिनेशन तकनीक में, एक वस्तु एक विधि को उजागर करती है, जिसे जब कॉल किया जाता है, तो उसे अन्य वस्तुओं के संदर्भों को छोड़ने के लिए विवश करता है, जिससे चक्र टूट जाता है। विभाजन पहचान तकनीक में, एक एकल कार्यान्वयन दो अलग-अलग सीओएम ऑब्जेक्ट्स (जिन्हें पहचान के रूप में भी जाना जाता है) को उजागर करता है। यह एक संदर्भ चक्र को रोकने, सीओएम ऑब्जेक्ट्स के बीच एक [[कमजोर संदर्भ]] बनाता है।


=== [[डीएलएल नरक]] ===
=== [[डीएलएल नरक]] ===
क्योंकि इन-प्रोसेस COM घटक DLL फ़ाइलों में कार्यान्वित किए जाते हैं और पंजीकरण केवल CLSID प्रति एक संस्करण के लिए अनुमति देता है, वे कुछ स्थितियों में DLL नरक प्रभाव के अधीन हो सकते हैं। पंजीकरण-मुक्त COM क्षमता इन-प्रोसेस घटकों के लिए इस समस्या को समाप्त करती है; आउट-ऑफ़-प्रोसेस सर्वर के लिए पंजीकरण-मुक्त COM उपलब्ध नहीं है।
क्योंकि इन-प्रोसेस सीओएम घटक डीएलएल फ़ाइलों में कार्यान्वित किए जाते हैं और पंजीकरण केवल CLSID प्रति एक संस्करण के लिए अनुमति देता है, वे कुछ स्थितियों में डीएलएल नरक प्रभाव के अधीन हो सकते हैं। पंजीकरण-मुक्त सीओएम क्षमता इन-प्रोसेस घटकों के लिए इस समस्या को समाप्त करती है; आउट-ऑफ़-प्रोसेस सर्वर के लिए पंजीकरण-मुक्त सीओएम उपलब्ध नहीं है।


== यह भी देखें ==
== यह भी देखें ==
* [[ पोर्टेबल वस्तु (कंप्यूटिंग) ]] क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल परिभाषा
* [[ पोर्टेबल वस्तु (कंप्यूटिंग) | पोर्टेबल वस्तु (कंप्यूटिंग)]] क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल परिभाषा
* [[वितरित घटक ऑब्जेक्ट मॉडल (DCOM), एक्सटेंशन COM को नेटवर्क में काम करने में सक्षम बनाता है]]
* [[वितरित घटक ऑब्जेक्ट मॉडल (DCOM), एक्सटेंशन COM को नेटवर्क में काम करने में सक्षम बनाता है|वितरित घटक ऑब्जेक्ट मॉडल (डीसीओएम), एक्सटेंशन सीओएम को नेटवर्क में काम करने में सक्षम बनाता है]]
* [[ सामान्य भाषा अवसंरचना ]] करंट .NET क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल
* [[ सामान्य भाषा अवसंरचना | सामान्य भाषा अवसंरचना]] करंट .नेट क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल
* विंडोज रनटाइम, एक एप्लिकेशन मॉडल, [[विंडोज 8]] को लक्षित करने वाले COM का विकसित संस्करण
* विंडोज रनटाइम, एक एप्लिकेशन मॉडल, [[विंडोज 8]] को लक्षित करने वाले सीओएम का विकसित संस्करण
* [[कॉर्बा कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर, ओपन क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल
* [[कॉर्बा कॉमन ऑब्जेक्ट रिक्वेस्ट ब्रोकर आर्किटेक्चर, ओपन क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल
* [[डी-बस]] ओपन क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल
* [[डी-बस]] ओपन क्रॉस लैंग्वेज क्रॉस प्लेटफॉर्म ऑब्जेक्ट मॉडल
* [[केपार्ट्स]] [[ कहाँ ]] घटक ढांचा
* [[केपार्ट्स]] [[ कहाँ |कहाँ]] घटक ढांचा
* [[आईबीएम सिस्टम ऑब्जेक्ट मॉडल]] IBM सिस्टम ऑब्जेक्ट मॉडल, COM का सुविधा संपन्न विकल्प
* [[आईबीएम सिस्टम ऑब्जेक्ट मॉडल]] IBM सिस्टम ऑब्जेक्ट मॉडल, सीओएम का सुविधा संपन्न विकल्प
* [[XPCOM मोज़िला एप्लिकेशन प्लेटफ़ॉर्म कंपोनेंट ऑब्जेक्ट मॉडल को पार करते हैं]]
* [[XPCOM मोज़िला एप्लिकेशन प्लेटफ़ॉर्म कंपोनेंट ऑब्जेक्ट मॉडल को पार करते हैं|XPसीओएम मोज़िला एप्लिकेशन प्लेटफ़ॉर्म कंपोनेंट ऑब्जेक्ट मॉडल को पार करते हैं]]
* [[उद्यम जावाबीन]]
* [[उद्यम जावाबीन]]
* [[जावा रिमोट मेथड इनवोकेशन]]
* [[जावा रिमोट मेथड इनवोकेशन]]
* [[इंटरनेट संचार इंजन]]
* [[इंटरनेट संचार इंजन]]
* [[भाषा बंधन]]
* [[भाषा बंधन]]
* [[विदेशी फ़ंक्शन इंटरफ़ेस]]
* [[विदेशी फ़ंक्शन इंटरफ़ेस|विदेशी फ़ंक्शन अंतरापृष्ठ]]
* [[कॉलिंग कन्वेंशन]]
* [[कॉलिंग कन्वेंशन]]
* [[नाम मंगलिंग]]
* [[नाम मंगलिंग]]
* [[एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस - एपीआई]]
* [[एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस - एपीआई|एप्लिकेशन प्रोग्रामिंग अंतरापृष्ठ - एपीआई]]
* [[एप्लिकेशन बाइनरी इंटरफ़ेस - एबीआई]]
* [[एप्लिकेशन बाइनरी इंटरफ़ेस - एबीआई|एप्लिकेशन बाइनरी अंतरापृष्ठ - एबीआई]]
* [[SWIG]] ओपनसोर्स स्वचालित इंटरफेस बाइंडिंग जनरेटर कई भाषाओं से अन्य भाषाओं में
* [[SWIG]] ओपनसोर्स स्वचालित अंतरापृष्ठ बाइंडिंग जनरेटर कई भाषाओं से अन्य भाषाओं में


[[Category:All Wikipedia articles written in American English]]
[[Category:All Wikipedia articles written in American English]]
Line 248: Line 250:


==बाहरी संबंध==
==बाहरी संबंध==
*[https://msdn.microsoft.com/en-us/library/windows/desktop/ms680573(v=vs.85).aspx Component Object Model on MSDN]
*[https://msdn.microsoft.com/en-us/library/windows/desktop/ms680573(v=vs.85).aspx सीओएमponeएनटी Object Model on MSDN]
*[http://channel9.msdn.com/ShowPost.aspx?PostID=224935 Interview with Tony Williams, Co-Inventor of COM] (Video Webcast, August 2006)
*[http://channel9.msdn.com/ShowPost.aspx?PostID=224935 Iएनटीerview with Tony Williams, Co-Inveएनटीor of सीओएम] (Video Webcast, August 2006)
*[http://support.microsoft.com/kb/159621/en-us Info: Difference Between OLE Controls and ActiveX Controls] from Microsoft
*[http://support.microsoft.com/kb/159621/en-us Info: Difference Between ओएलई Coएनटीrols and एक्टिव एक्स Coएनटीrols] from माइक्रोसॉफ्ट
*[http://theircorp.byethost11.com/index.php?vw=TypeLib TypeLib Data Format Specification (unofficial)] with open source dumper utility.
*[http://theircorp.byethost11.com/index.php?vw=TypeLib TypeLib Data Format Specification (unofficial)] with कोपn source dumper utility.
*[https://web.archive.org/web/20090215185257/http://innovatia.com/software/papers/com.htm The COM / DCOM Glossary]
*[https://web.archive.org/web/20090215185257/http://innovatia.com/software/papers/com.htm The सीओएम / डीसीओएम Glossary]


{{Microsoft APIs}}
{{Microsoft APIs}}

Revision as of 09:44, 17 May 2023

COM
Component Object Model
AbbreviationCOM
StatusIn force
First published1993; 31 years ago (1993)
Latest versionLiving standard
2021
OrganizationMicrosoft
SeriesSystem Services
Base standardsMIDL, UUID
Related standards
DomainComponent Interfacing
Websitedocs.microsoft.com/en-us/windows/win32/com/the-component-object-model

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

सीओएम एक अंतरापृष्ठ तकनीक है जिसे केवल माइक्रोसॉफ्ट विंडोज़ और एप्पल के कोर फाउंडेशन 1.3 और बाद में प्लग-इन अप्लिकेशन प्रोग्रामिंग अंतरफलक (एपीआई) पर मानक के रूप में परिभाषित और कार्यान्वित किया गया है।[1] उत्तरार्द्ध केवल पूरे सीओएम अंतरापृष्ठ का सबसेट लागू करता है।[2] कुछ अनुप्रयोगों के लिए, सीओएम को कम से कम कुछ हद तक .नेट फ़्रेमवर्क, माइक्रोसॉफ्ट .नेट फ़्रेमवर्क, और विंडोज़ संचार फ़ाउंडेशन (डब्ल्यूसीएफ) के माध्यम से वेब सेवाओं के लिए समर्थन द्वारा प्रतिस्थापित किया गया है। हालांकि, .नेट सीओएम इंटरऑप के माध्यम से सीओएम ऑब्जेक्ट्स का उपयोग सभी .नेट भाषाओं के साथ किया जा सकता है। नेटवर्क्ड डीसीओएम बाइनरी उत्तरदायी प्रारूप का उपयोग करता है, जबकि डब्ल्यूसीएफ एक्सएमएल- आधारित एसओएपी (प्रोटोकॉल) मैसेजिंग के उपयोग को प्रोत्साहित करता है। सीओएम अन्य घटक सॉफ़्टवेयर अंतरापृष्ठ तकनीकों के समान है, जैसे कोबरा और एंटरप्राइज जावाबीन्स, हालांकि प्रत्येक की अपनी ताकत और कमजोरियां हैं। C++ के विपरीत, सीओएम एक स्थिर अनुप्रयोग बाइनरी अंतरापृष्ठ (एबीआई) प्रदान करता है जो कंपाइलर रिलीज़ के बीच नहीं बदलता है।[3] यह सीओएम अंतरापृष्ठ को ऑब्जेक्ट-ओरिएंटेड सीC++ लाइब्रेरी के लिए आकर्षक बनाता है, जिनका उपयोग ग्राहकों द्वारा विभिन्न कंपाइलर संस्करणों का उपयोग करके संकलित किया जाता है।

इतिहास

विंडोज़ में इंटरप्रोसेस संचार के पहले तरीकों में से एक डायनेमिक डेटा स्थानांतरण (डीडीई) था,[4] जिसे पहली बार 1987 में प्रस्तुत किया गया,[5] जो अनुप्रयोगों के बीच तथाकथित कम्युनिकेशनों में संदेश भेजने और प्राप्त करने की अनुमति देता है। एंटनी विलियम्स (प्रौद्योगिकीविद्), जो सीओएम आर्किटेक्चर के निर्माण में सम्मिलित थे, ने बाद में माइक्रोसॉफ्ट में दो आंतरिक पेपर वितरित किए जिन्होंने सॉफ्टवेयर घटकों की अवधारणा को अपनाया: ऑब्जेक्ट आर्किटेक्चर: डीलिंग विथ द अननोन - या - टाइप सेफ्टी इन ए डायनेमिकली एक्सटेंसिबल क्लास लाइब्रेरी 1988 में और इनहेरिटेंस: व्हाट इट मीन्स एंड हाउ टू यूज़ इट इन 1990 में इसने सीओएम के पीछे कई विचारों की नींव प्रदान की। ऑब्जेक्ट लिंकिंग एंड एंबेडिंग (ओएलई), माइक्रोसॉफ्ट का पहला ऑब्जेक्ट-आधारित फ्रेमवर्क, डीडीई के शीर्ष पर बनाया गया था और विशेष रूप से मिश्रित डॉक्यूमेंटों के लिए डिज़ाइन किया गया था। इसे 1991 में विंडोज और माइक्रोसॉफ्ट एक्सेल के लिए वर्ड के साथ प्रस्तुत किया गया था, और बाद में 1992 में वर्जन 3.1 के साथ प्रारम्भ करते हुए विंडोज के साथ सम्मिलित किया गया था। कंपाउंड डॉक्यूमेंट का एक उदाहरण विंडोज डॉक्यूमेंट के लिए वर्ड में एम्बेडेड स्प्रेडशीट है: जैसा कि इसमें बदलाव किए जाते हैं। एक्सेल में स्प्रेडशीट, वे स्वचालित रूप से वर्ड डॉक्यूमेंट के अंदर दिखाई देते हैं।

1991 में, माइक्रोसॉफ्ट ने विज़ुअल बेसिक एक्सटेंशन (वीबीएक्सX) को विज़ुअल बेसिक 1.0 के साथ प्रस्तुत किया। एक वीबीएक्स एक डायनेमिक-लिंक लाइब्रेरी (डीएलएल) के रूप में एक पैकेज्ड एक्सटेंशन है जो वस्तुओं को ग्राफिक रूप से एक रूप में रखने और गुणधर्म (प्रोग्रामिंग) और विधि (कंप्यूटर विज्ञान) द्वारा हेरफेर करने की अनुमति देता है। इन्हें बाद में अन्य भाषाओं जैसे विजुअल सी ++ ++ द्वारा उपयोग के लिए अनुकूलित किया गया था। 1992 में, जब विंडोज़ का विंडोज़ 3.1x संस्करण जारी किया गया था, तो माइक्रोसॉफ्ट ने इसके अंतर्निहित वस्तु मॉडल के साथ ओएलई 2 जारी किया। सीओएम एप्लिकेशन बाइनरी अंतरापृष्ठ (एबीआई) एमएपीआई एबीआई (1992 में जारी) के समान था, और जैसे यह एमएसआरपीसी पर आधारित था और अंततः खुला समूह के डीसीई/आरपीसी पर आधारित था। जबकि ओएलई 1 यौगिक डॉक्यूमेंट पर केंद्रित था, सीओएम और ओएलई 2 को सामान्य रूप से सॉफ़्टवेयर घटकों को संबोधित करने के लिए डिज़ाइन किया गया था। टेक्स्ट कम्युनिकेशन और विंडोज संदेश एक मजबूत और एक्स्टेंसिबल तरीके से एप्लिकेशन सुविधाओं को साझा करने की अनुमति देने के लिए पर्याप्त लचीले प्रमाणित नहीं हुए थे, इसलिए सीओएम को एक नई नींव के रूप में बनाया गया था, और ओएलई को ओएलई2 में बदल दिया गया था। 1994 में ओएलई कस्टम नियंत्रण (ओसीएक्स) को वीबीएक्सX नियंत्रणों के उत्तराधिकारी के रूप में प्रस्तुत किया गया था। उसी समय, माइक्रोसॉफ्ट ने कहा कि ओएलई 2 को केवल ओएलई के रूप में जाना जाएगा, और यह कि ओएलई अब एक संक्षिप्त नाम नहीं था, बल्कि कंपनी की सभी घटक तकनीकों के लिए एक नाम था। 1996 के प्रारम्भ में, माइक्रोसॉफ्ट ने ओएलई कस्टम नियंत्रणों के लिए एक नया उपयोग पाया, सामग्री को प्रस्तुत करने के लिए अपने वेब ब्राउज़र की क्षमता का विस्तार करते हुए, इंटरनेट एक्टिव एक्स से संबंधित ओएलई के कुछ हिस्सों का नाम बदल दिया, और धीरे-धीरे सभी ओएलई तकनीकों का नाम बदलकर एक्टिव एक्स कर दिया, यौगिक डॉक्यूमेंट तकनीक को छोड़कर माइक्रोसॉफ्ट ऑफिस में उपयोग किया जाता है। उस वर्ष बाद में, माइक्रोसॉफ्ट ने वितरित घटक ऑब्जेक्ट मॉडल के साथ पूरे नेटवर्क में काम करने के लिए सीओएम का विस्तार किया।[6]


संबंधित प्रौद्योगिकियां

सीओएम विंडोज के लिए प्रमुख सॉफ्टवेयर डेवलपमेंट प्लेटफॉर्म था और इस तरह, कई सहायक तकनीकों के विकास को प्रभावित किया। यह वैसे ही पहले की तकनीकों से काफी प्रभावित था।

डीडीई

सीओएम ने डायनेमिक डेटा स्थानांतरण को इंटरप्रोसेस संचार के पसंदीदा रूप में बदल दिया।

डीसीई/आरपीसी और एमएसआरपीसी

क्रॉस-भाषा घटक मॉडल के रूप में, सीओएम वस्तुओं और संबंधित कार्यों का वर्णन करने के लिए अंतरापृष्ठ परिभाषा भाषा या आईडीएल पर निर्भर करता है। सीओएम आईडीएल ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन के साथ, सुविधा संपन्न डीसीई/आरपीसी आईडीएल पर बहुत अधिक आधारित है। माइक्रोसॉफ्ट का खुद का डीसीई/आरपीसी का कार्यान्वयन, जिसे एमएसआरपीसी के रूप में जाना जाता है, का उपयोग विंडोज़ एनटी सेवाओं और आंतरिक घटकों के लिए प्राथमिक अंतर-प्रक्रिया संचार तंत्र के रूप में किया जाता है, जिससे यह नींव का एक स्पष्ट विकल्प बन जाता है।

वितरित घटक वस्तु मॉडल

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

कॉम+

माइक्रोसॉफ्ट के लिए डेवलपर्स को वितरित लेनदेन, संसाधन पूलिंग, डिस्कनेक्ट किए गए एप्लिकेशन, इवेंट प्रकाशन और सदस्यता, बेहतर मेमोरी और प्रोसेसर (थ्रेड) प्रबंधन के साथ-साथ विंडोज को अन्य एंटरप्राइज़-स्तरीय ऑपरेटिंग सिस्टम के विकल्प के रूप में स्थापित करने के लिए समर्थन प्रदान करने के लिए, माइक्रोसॉफ्ट ने विंडोज़ एनटी 4 पर माइक्रोसॉफ्ट ट्रांज़ैक्शन सर्वर (एमटीएस) नामक एक तकनीक प्रस्तुत की। विंडोज़ 2000 के साथ, सीओएम के उस महत्वपूर्ण विस्तार को ऑपरेटिंग सिस्टम में सम्मिलित किया गया (जैसा कि माइक्रोसॉफ्ट ट्रांज़ैक्शन सर्वर द्वारा प्रदान किए गए बाहरी उपकरणों की श्रृंखला के विपरीत) और सीओएम+ का नाम बदल दिया गया। उसी समय, माइक्रोसॉफ्ट ने एक अलग इकाई के रूप में वितरित घटक ऑब्जेक्ट मॉडल पर जोर दिया। सीओएम+ सेवाओं का उपयोग करने वाले घटकों को सीधे सीओएम+ की अतिरिक्त परत द्वारा नियंत्रित किया जाता था, विशेष रूप से इंटरसेप्शन के लिए ऑपरेटिंग सिस्टम समर्थन द्वारा। एमटीएस की पहली रिलीज में, इंटरसेप्शन पर काम किया गया था - एमटीएस घटक स्थापित करने से एमटीएस सॉफ्टवेयर को कॉल करने के लिए विंडोज रजिस्ट्री को संशोधित किया जाएगा, न कि सीधे घटक को। विंडोज़ 2000 ने सीओएम+ घटकों को कॉन्फ़िगर करने के लिए उपयोग किए जाने वाले घटक सेवा नियंत्रण कक्ष अनुप्रयोग को भी संशोधित किया।

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

नेट

माइक्रोसॉफ्ट .नेट घटक प्रौद्योगिकी प्रदान करने और सीओएम+ (सीओएम-इंटरॉप-असेंबली के माध्यम से) के साथ पारस्परिक क्रिया करने के लिए साधन प्रदान करता है; .नेट सामान्यतः उपयोग किए जाने वाले अधिकांश सीओएम नियंत्रणों को रैपर प्रदान करता है। माइक्रोसॉफ्ट .नेट घटक निर्माण से अधिकांश विवरण छुपाता है और इसलिए विकास को आसान बनाता है। .नेट, सिस्टम.एंटरप्राइज़सर्विसेज नामस्थान के माध्यम से सीओएम+ का लाभ उठा सकता है, और सीओएम+ द्वारा प्रदान की जाने वाली कई सेवाओं को .नेट की हाल की रिलीज़ में डुप्लिकेट किया गया है। उदाहरण के लिए, .नेट में सिस्टम.ट्रांज़ैक्शन नेमस्पेस ट्रांज़ैक्शनकोप वर्ग प्रदान करता है, जो सीओएम+ का सहारा लिए बिना लेनदेन प्रबंधन प्रदान करता है। इसी तरह, कतार (डेटा संरचना) को विंडोज कम्युनिकेशन फाउंडेशन द्वारा एमएसएमक्यू ट्रांसपोर्ट के साथ बदला जा सकता है। (एमएसएमक्यू एक देशी सीओएम घटक है, हालांकि) पिछड़े संगतता के लिए सीमित समर्थन है। रनटाइम कॉल करने योग्य रैपर (आरसीडब्ल्यू) को लागू करके .नेट में सीओएम ऑब्जेक्ट का उपयोग किया जा सकता है।[7] नेट ऑब्जेक्ट्स जो कुछ अंतरापृष्ठ प्रतिबंधों के अनुरूप होते हैं, सीओएम ऑब्जेक्ट में सीओएम कॉल करने योग्य रैपर (सीसीडब्ल्यू) को कॉल करके उपयोग किए जा सकते हैं।[8] सीओएम और .नेट दोनों पक्षों से, अन्य तकनीक का उपयोग करने वाली वस्तुएँ मूल वस्तुओं के रूप में दिखाई देती हैं। कॉम इंटरऑप देखें।

विंडोज कम्युनिकेशन फाउंडेशन (विंडोज कम्युनिकेशन फाउंडेशन) सीओएम की कई दूरस्थ निष्पादन चुनौतियों को आसान बनाता है। उदाहरण के लिए, यह वस्तुओं को पारदर्शी रूप से प्रक्रिया या मशीन की सीमाओं के मूल्य से अधिक आसानी से मार्शल करने की अनुमति देता है।

विंडोज रनटाइम

माइक्रोसॉफ्ट का विंडोज रनटाइम (या विनआरटी, विंडोज आरटी के साथ भ्रमित नहीं होना) प्रोग्रामिंग और एप्लिकेशन मॉडल अनिवार्य रूप से एक कॉम-आधारित एपीआई है, हालांकि यह एक उन्नत कॉम पर निर्भर करता है। इसके सीओएम जैसे आधार के कारण, विंडोज़ रनटाइम कई भाषाओं से अपेक्षाकृत आसान अंतरापृष्ठिंग की अनुमति देता है, जैसा कि सीओएम करता है, लेकिन यह अनिवार्य रूप से एक अप्रबंधित, देशी एपीआई है। हालाँकि, एपीआई परिभाषाएँ .winmd फ़ाइलों में संग्रहीत हैं, जो ECMA 335 मेटाडेटा प्रारूप में एन्कोडेड हैं, वही मेटाडेटा (सीएलआई)CLI) प्रारूप जो .नेट कुछ संशोधनों के साथ उपयोग करता है। जब WinRT को .नेट अनुप्रयोगों से मंगाया जाता है, तो यह सामान्य मेटाडेटा प्रारूप P/Invoke की तुलना में काफी कम ओवरहेड की अनुमति देता है, और इसका सिंटैक्स बहुत सरल है।

नैनो-कॉम (उर्फ XPसीओएम)

नैनो-कॉम कंपोनेंट ऑब्जेक्ट मॉडल का एक बहुत छोटा उपसमुच्चय है जो विशेष रूप से कॉम के एप्लिकेशन बाइनरी अंतरापृष्ठ (एबीआई) पहलुओं पर केंद्रित है जो स्वतंत्र रूप से संकलित मॉड्यूल/घटकों में फ़ंक्शन और विधि कॉल को सक्षम करता है। नैनो-कॉम को एक सी++ हेडर फ़ाइल में आसानी से व्यक्त किया जा सकता है जो सभी सी++ कंपाइलरों के लिए पोर्टेबल है। नैनो-कॉम टाइप किए गए ऑब्जेक्ट संदर्भों के लिए समर्थन जोड़ने के लिए अंतर्निहित निर्देश आर्किटेक्चर और ओएस के मूल एबीआई को बढ़ाता है (सामान्य एबीआई केवल परमाणु प्रकार, संरचनाओं, सरणियों और फ़ंक्शन कॉलिंग सम्मेलनों पर ध्यान केंद्रित करता है)। नैनो-कॉम के आधार का उपयोग Mozilla द्वारा Firefox (XPसीओएम कहा जाता है) को बूटस्ट्रैप करने के लिए किया गया था, और वर्तमान में डायरेक्टX/डायरेक्ट3D/डायरेक्टML के लिए आधार एबीआई तकनीक के रूप में उपयोग में है।

एक नैनो-कॉम हेडर फ़ाइल कम से कम तीन प्रकारों को परिभाषित या नाम देती है:

  • अंतरापृष्ठ प्रकारों की पहचान करने के लिए GUID - यह प्रभावी रूप से 128 बिट संख्या है
  • विधि कॉल से त्रुटि कोड की पहचान करने के लिए HRESULT - यह प्रभावी रूप से 32-बिट iएनटीs के प्रसिद्ध मानों (S_OK, E_FAIL, E_OUTOFMEMORY, आदि) का मानकीकृत उपयोग है।
  • Iसभी टाइप किए गए ऑब्जेक्ट संदर्भों के लिए आधार प्रकार के रूप में अज्ञात - यह समर्थन करने के लिए प्रभावी रूप से सार वर्चुअल फ़ंक्शंस है dynamic_cast<T>नए अंतरापृष्ठ प्रकारों का -स्टाइल अधिग्रहण और एक ला की गिनती करना shared_ptr<T>

नैनो-कॉम के कई उपयोग परिणाम के रूप में कैली-आवंटित मेमोरी बफ़र्स को संबोधित करने के लिए दो कार्यों को भी परिभाषित करते हैं

  • <Nanoसीओएम>Alloc - कॉल करने वाले को लौटाए जाने वाले कच्चे बफर (ऑब्जेक्ट नहीं) आवंटित करने के लिए विधि कार्यान्वयन द्वारा बुलाया जाता है
  • <Nanoसीओएम>निःशुल्क - विधि कॉल करने वालों द्वारा कैली-आवंटित बफ़र्स को एक बार उपयोग में नहीं होने पर मुक्त करने के लिए कॉल किया जाता है

नैनो-कॉम के कुछ कार्यान्वयन जैसे कि डायरेक्ट 3 डी एलोकेटर फ़ंक्शंस से बचते हैं और केवल कॉलर-आवंटित बफ़र्स का उपयोग करने के लिए खुद को प्रतिबंधित करते हैं।

नैनो-कॉम में कक्षाओं, अपार्टमेंट्स, मार्शलिंग, पंजीकरण आदि की कोई धारणा नहीं है। बल्कि, वस्तु संदर्भों को केवल कार्य सीमाओं के पार भेज दिया जाता है और मानक भाषा निर्माण (जैसे, C++ नया ऑपरेटर) के माध्यम से आवंटित किया जाता है।

सुरक्षा

सीओएम और एक्टिव एक्स घटकों को बिना किसी सैंडबॉक्सिंग के उपयोगकर्ता की मशीन पर देशी कोड के रूप में चलाया जाता है। इसलिए कोड क्या कर सकता है, इस पर कुछ प्रतिबंध हैं। इंटरनेट एक्सप्लोरर के साथ वेब पेजों पर एक्टिव एक्स घटकों को एम्बेड करने के पूर्व अभ्यास ने मैलवेयर संक्रमणों के साथ समस्याओं को जन्म दिया। माइक्रोसॉफ्ट ने एक्टिव एक्स के साथ समस्या को 1996 में ही पहचान लिया था जब चार्ल्स फिट्जगेराल्ड ने कहा था, हमने कभी भी यह दावा नहीं किया कि एक्टिव एक्स आंतरिक रूप से सुरक्षित है।[9] हाल ही का[when?] Iएनटीerनेट Explorer के संस्करण एक्टिव एक्स नियंत्रणों को स्थापित करने से पहले उपयोगकर्ता को संकेत देते हैं, उपयोगकर्ता को उन साइटों से नियंत्रणों की स्थापना को अस्वीकार करने में सक्षम बनाता है जिन पर उपयोगकर्ता भरोसा नहीं करता है। एक्टिव एक्स नियंत्रण उनकी प्रामाणिकता की गारंटी के लिए डिजिटल हस्ताक्षर के साथ कोड हस्ताक्षर कर रहे हैं। एक्टिव एक्स नियंत्रणों को पूरी तरह से अक्षम करना या केवल कुछ चुनिंदा को अनुमति देना भी संभव है। आउट-ऑफ-प्रोसेस सीओएम सर्वरों के लिए पारदर्शी समर्थन अभी भी प्रक्रिया अलगाव के संदर्भ में सॉफ़्टवेयर सुरक्षा को बढ़ावा देता है। यह बड़े अनुप्रयोग के सबसिस्टम को अलग-अलग प्रक्रियाओं में अलग करने के लिए उपयोगी हो सकता है। प्रक्रिया अलगाव एक प्रक्रिया में राज्य के भ्रष्टाचार को अन्य प्रक्रियाओं की अखंडता को नकारात्मक रूप से प्रभावित करने से रोकता है, क्योंकि वे केवल कड़ाई से परिभाषित अंतरापृष्ठ के माध्यम से संचार करते हैं। इस प्रकार, वैध स्थिति को पुनः प्राप्त करने के लिए केवल प्रभावित सबसिस्टम को पुनः आरंभ करने की आवश्यकता है। यह एक ही प्रक्रिया के भीतर सबसिस्टम के मामले में नहीं है, जहां एक सबसिस्टम में एक दुष्ट सूचक अन्य सबसिस्टम को बेतरतीब ढंग से दूषित कर सकता है।

तकनीकी विवरण

सीओएम प्रोग्रामर सीओएम-जागरूक सॉफ़्टवेयर घटकों का उपयोग करके अपने सॉफ़्टवेयर का निर्माण करते हैं। क्लास आईडी (CLSIDs) द्वारा विभिन्न घटक प्रकारों की पहचान की जाती है, जो वैश्विक रूप से विशिष्ट पहचानकर्ता (GUIDs) हैं। प्रत्येक सीओएम घटक एक या अधिक अंतरापृष्ठ (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के माध्यम से अपनी कार्यक्षमता को उजागर करता है। एक घटक द्वारा समर्थित विभिन्न अंतरापृष्ठ अंतरापृष्ठ आईडी (आईआईडी) का उपयोग करके एक दूसरे से अलग होते हैं, जो कि GUID भी हैं। सीओएम अंतरापृष्ठ में कई भाषाओं में भाषा बंधन होती है, जैसे C (प्रोग्रामिंग लैंग्वेज), C++, विजुअल बेसिक, डेल्फी (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज)।[10][11] और कई स्क्रिप्टिंग भाषाओं को विंडोज प्लेटफॉर्म पर लागू किया गया। घटकों तक सभी पहुंच अंतरापृष्ठ की विधि (कंप्यूटर विज्ञान) के माध्यम से की जाती है। यह इंटर-प्रोसेस, या यहां तक ​​कि इंटर-कंप्यूटर प्रोग्रामिंग (डीसीओएम के समर्थन का उपयोग करने वाला बाद वाला) जैसी तकनीकों की अनुमति देता है।

अंतरापृष्ठ

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

कक्षाएं

एक सीओएम वर्ग (coclass) एक या एक से अधिक अंतरापृष्ठ का एक ठोस कार्यान्वयन है, और वस्तु-उन्मुख प्रोग्रामिंग भाषाओं में कक्षाओं के समान है। कक्षाएं उनकी क्लास आईडी (CLSID) या उनके प्रोग्रामेटिक आइडेंटिफ़ायर स्ट्रिंग (ProgID) के आधार पर बनाई जाती हैं। कई वस्तु-उन्मुख भाषाओं की तरह, सीओएम अंतरापृष्ठ को कार्यान्वयन से अलग करता है। यह अंतर विशेष रूप से सीओएम में मजबूत है, जहां वस्तुओं को सीधे एक्सेस नहीं किया जा सकता है, लेकिन केवल उनके अंतरापृष्ठ के माध्यम से। सीओएम के पास एक ही अंतरापृष्ठ के कई कार्यान्वयन के लिए समर्थन भी है, ताकि रन टाइम (प्रोग्राम जीवनचक्र चरण) पर क्लाइंट यह चुन सकें कि अंतरापृष्ठ के किस कार्यान्वयन को तुरंत चालू किया जाए।

अंतरापृष्ठ परिभाषा भाषा और प्रकार पुस्तकालय

प्रकार पुस्तकालयों में सीओएम प्रकारों का प्रतिनिधित्व करने के लिए मेटाडेटा होता है। इन प्रकारों को माइक्रोसॉफ्ट अंतरापृष्ठ परिभाषा भाषा (एमएसआईडीएल/आईडीएल) का उपयोग करके वर्णित किया गया है। आईडीएल फाइलें ऑब्जेक्ट-ओरिएंटेड क्लासेस, अंतरापृष्ठ, स्ट्रक्चर्स, एन्यूमरेशन और अन्य यूजर-डिफाइन्ड टाइप्स को भाषा स्वतंत्र तरीके से परिभाषित करती हैं। आईडीएल कुछ अतिरिक्त कीवर्ड जैसे अंतरापृष्ठ और कक्षाओं के संग्रह को परिभाषित करने के लिए अंतरापृष्ठ और लाइब्रेरी के साथ C ++ घोषणाओं के समान है। आईडीएल अतिरिक्त जानकारी प्रदान करने के लिए घोषणा से पहले ब्रैकेटेड विशेषताओं के उपयोग का भी समर्थन करता है, जैसे कि अंतरापृष्ठ GUID और पॉइंटर पैरामीटर और लंबाई फ़ील्ड के बीच संबंध। आईडीएल फाइलें एमआईडीएल कंपाइलर द्वारा संकलित की जाती हैं। C/C++ के लिए, Mआईडीएल कंपाइलर एक कंपाइलर-स्वतंत्र हेडर फ़ाइल बनाता है जिसमें घोषित अंतरापृष्ठ की वर्चुअल मेथड टेबल से मिलान करने के लिए स्ट्रक्चर डेफिनिशन होता है और एक C फाइल जिसमें अंतरापृष्ठ ग्लोबली यूनिक आइडेंटिफायर की घोषणा होती है। एक प्रॉक्सी मॉड्यूल के लिए C++ स्रोत कोड भी Mआईडीएल संकलक द्वारा उत्पन्न किया जा सकता है। इस प्रॉक्सी में प्रक्रिया से बाहर संचार के लिए डीसीओएम को सक्षम करने के लिए सीओएम कॉल को दूरस्थ प्रक्रिया कॉल में परिवर्तित करने के लिए विधि स्टब्स हैं। आईडीएल फाइलों को एमआईडीएल कंपाइलर द्वारा टाइप लाइब्रेरी (टीएलबी) में भी संकलित किया जा सकता है। TLB फ़ाइलों में बाइनरी मेटाडेटा होता है जिसे TLB में परिभाषित सीओएम प्रकारों का प्रतिनिधित्व करने के लिए भाषा-विशिष्ट निर्माण उत्पन्न करने के लिए विभिन्न भाषा संकलक और रनटाइम वातावरण (जैसे वीबीएक्स, डेल्फी, .नेट आदि) द्वारा संसाधित किया जा सकता है। सी ++ के लिए, यह टीएलबी को वापस अपने आईडीएल प्रतिनिधित्व में परिवर्तित कर देगा।

ऑब्जेक्ट फ्रेमवर्क

क्योंकि सीओएम एक रनटाइम फ्रेमवर्क है, प्रकारों को व्यक्तिगत रूप से पहचाने जाने योग्य और रनटाइम पर निर्दिष्ट करने योग्य होना चाहिए। इसे प्राप्त करने के लिए, विश्व स्तर पर विशिष्ट पहचानकर्ता (GUIDs) का उपयोग किया जाता है। रनटाइम पर पहचान के लिए प्रत्येक सीओएम प्रकार को अपना स्वयं का GUID नामित किया गया है। संकलन समय और रनटाइम दोनों पर सीओएम प्रकारों की जानकारी तक पहुँचने के लिए, सीओएम प्रकार पुस्तकालयों का उपयोग करता है। यह प्रकार पुस्तकालयों के प्रभावी उपयोग के माध्यम से है कि सीओएम वस्तुओं की बातचीत के लिए गतिशील ढांचे के रूप में अपनी क्षमताओं को प्राप्त करता है।

आईडीएल में निम्नलिखित उदाहरण कोक्लास परिभाषा पर विचार करें:

coclass SomeClass {
  [default] interface ISomeInterface;
};

उपरोक्त कोड खंड नामित एक सीओएम वर्ग घोषित करता है SomeClass जो नाम के एक अंतरापृष्ठ को लागू करता है ISomeIएनटीerface.

यह वैचारिक रूप से निम्नलिखित C++ वर्ग को परिभाषित करने के बराबर है:

class SomeClass : public ISomeInterface {
  ...
  ...
};

जहाँ ISomeIएनटीerface एक C++ शुद्ध आभासी वर्ग है (जिसे कभी-कभी एब्स्ट्रैक्ट बेस क्लास भी कहा जाता है)।

सीओएम अंतरापृष्ठ और कक्षाओं वाली आईडीएल फाइलें टाइप लाइब्रेरी (TLB) फाइलों में संकलित की जाती हैं, जिन्हें बाद में रनटाइम पर क्लाइंट द्वारा पार्स किया जा सकता है, यह निर्धारित करने के लिए कि कौन सा अंतरापृष्ठ किसी ऑब्जेक्ट का समर्थन करता है, और किसी ऑब्जेक्ट के अंतरापृष्ठ तरीकों को लागू करता है।

सी ++ में, सीओएम ऑब्जेक्ट्स को तत्काल किया जाता है CoCreateInstance फ़ंक्शन जो क्लास आईडी (CLSID) और अंतरापृष्ठ आईडी (IID) को तर्क के रूप में लेता है। की तात्कालिकता SomeClass निम्नानुसार कार्यान्वित किया जा सकता है:

ISomeInterface* interface_ptr = NULL;
HRESULT hr = CoCreateInstance(CLSID_SomeClass, NULL, CLSCTX_ALL,
                              IID_ISomeInterface, (void**)&interface_ptr);

इस उदाहरण में, सीओएम सब-सिस्टम का उपयोग किसी ऑब्जेक्ट के लिए पॉइंटर प्राप्त करने के लिए किया जाता है जो लागू होता है ISomeIएनटीerface अंतरापृष्ठ, और coclass CLSID_SomeClass के इस अंतरापृष्ठ के विशेष कार्यान्वयन की आवश्यकता है।

संदर्भ गिनती

ऑब्जेक्ट जीवनकाल प्रबंधित करने के लिए सभी सीओएम ऑब्जेक्ट संदर्भ गणना का उपयोग करते हैं। सभी सीओएम ऑब्जेक्ट लागू करने वाले अनिवार्य I अज्ञात अंतरापृष्ठ में AddRef और रिलीज़ विधियों के माध्यम से क्लाइंट द्वारा संदर्भ संख्या को नियंत्रित किया जाता है। सीओएम ऑब्जेक्ट तब अपनी स्वयं की मेमोरी को मुक्त करने के लिए ज़िम्मेदार होते हैं जब संदर्भ संख्या शून्य हो जाती है। कुछ भाषाएं (जैसे विज़ुअल बेसिक) स्वत: संदर्भ गणना प्रदान करती हैं ताकि सीओएम ऑब्जेक्ट डेवलपर्स को अपने स्रोत कोड में किसी आंतरिक संदर्भ काउंटर को स्पष्ट रूप से बनाए रखने की आवश्यकता न हो। सी ++ में, एक कोडर या तो स्पष्ट संदर्भ गणना कर सकता है या संदर्भ गणनाओं को स्वचालित रूप से प्रबंधित करने के लिए स्मार्ट सूचक ्स का उपयोग कर सकता है।

AddRef को कब कॉल करना है और सीओएम ऑब्जेक्ट्स पर रिलीज़ करना है, इसके लिए निम्नलिखित दिशानिर्देश हैं:

  • फ़ंक्शंस और विधियाँ जो अंतरापृष्ठ संदर्भ लौटाती हैं (वापसी मान या आउट पैरामीटर के माध्यम से) लौटने से पहले लौटाई गई वस्तु की संदर्भ संख्या में वृद्धि होगी।
  • पॉइंटर के अधिलेखित होने या दायरे से बाहर होने से पहले अंतरापृष्ठ पॉइंटर पर रिलीज़ को कॉल किया जाना चाहिए।
  • यदि अंतरापृष्ठ संदर्भ सूचक पर प्रतिलिपि बनाई जाती है, तो उस सूचक पर AddRef को कॉल किया जाना चाहिए।
  • AddRef और रिलीज को विशिष्ट अंतरापृष्ठ पर कॉल किया जाना चाहिए जिसे संदर्भित किया जा रहा है क्योंकि ऑब्जेक्ट प्रति-अंतरापृष्ठ संदर्भ गणनाओं को कार्यान्वित कर सकता है ताकि केवल संदर्भित अंतरापृष्ठ के लिए आंतरिक संसाधनों को आवंटित किया जा सके।

तार पर दूरस्थ वस्तुओं को सभी संदर्भ गणना कॉल नहीं भेजी जाती हैं; एक प्रॉक्सी दूरस्थ वस्तु पर केवल एक संदर्भ रखता है और अपनी स्थानीय संदर्भ संख्या को बनाए रखता है। सीओएम के विकास को सरल बनाने के लिए, माइक्रोसॉफ्ट ने C++ डेवलपर्स के लिए सक्रिय टेम्पलेट लाइब्रेरी | ATL (एक्टिव टेम्प्लेट लाइब्रेरी) के प्रारम्भ की। ATL एक उच्च-स्तरीय सीओएम विकास प्रतिमान प्रदान करता है। यह सीओएम क्लाइंट एप्लिकेशन डेवलपर्स को स्मार्ट पॉइंटर ऑब्जेक्ट प्रदान करके सीधे संदर्भ गिनती बनाए रखने की आवश्यकता से भी बचाता है। अन्य पुस्तकालय और भाषाएँ जो सीओएम-जागरूक हैं, उनमें माइक्रोसॉफ्ट Foundation Classes, Visual C++ सीओएमpiler सीओएम Support, सम्मिलित हैं।[12] वीबीस्क्रिप्ट, विजुअल बेसिक 2005 एक्सप्रेस संस्करण, ईसीएमएस्क्रिप्ट ([[एकमा स्क्रिप्ट]]) और बोरलैंड डेल्फी

प्रोग्रामिंग

सीओएम एक भाषा-स्वतंत्र विनिर्देश बाइनरी मानक है जिसे किसी भी प्रोग्रामिंग भाषा में विकसित किया जा सकता है जो इसके बाइनरी परिभाषित डेटा प्रकारों और अंतरापृष्ठ को समझने और कार्यान्वित करने में सक्षम है। सीओएम कार्यान्वयन सीओएम वातावरण में प्रवेश करने और छोड़ने, सीओएम ऑब्जेक्ट्स को तत्काल और संदर्भ-गणना करने, समर्थित अंतरापृष्ठ के लिए ऑब्जेक्ट क्वेरी करने, साथ ही साथ त्रुटियों को संभालने के लिए ज़िम्मेदार हैं। माइक्रोसॉफ्ट विज़ुअल सी ++ कंपाइलर सी ++ एट्रिब्यूट्स के रूप में संदर्भित सी ++ भाषा के एक्सटेंशन का समर्थन करता है।[13] ये एक्सटेंशन सीओएम विकास को आसान बनाने और C++ में सीओएम सर्वरों को लागू करने के लिए आवश्यक बॉयलरप्लेट कोड को हटाने के लिए डिज़ाइन किए गए हैं।[14]


रजिस्ट्री उपयोग

विंडोज में, सीओएम क्लासेस, अंतरापृष्ठ और टाइप लाइब्रेरी को GUID द्वारा विंडोज रजिस्ट्री में सूचीबद्ध किया गया है, HKEY_CLASSES_ROOT\CLSID के तहत कक्षाओं के लिए और HKEY_CLASSES_ROOT\Iएनटीerface अंतरापृष्ठ के लिए। सीओएम लायब्रेरी प्रत्येक सीओएम ऑब्जेक्ट या किसी दूरस्थ सेवा के लिए नेटवर्क स्थान के लिए या तो सही स्थानीय लायब्रेरी का पता लगाने के लिए रजिस्ट्री का उपयोग करें।

पंजीकरण मुक्त कॉम

पंजीकरण-मुक्त सीओएम (RegFree सीओएम) विंडोज़ XP के साथ प्रारम्भ की गई एक तकनीक है जो घटक ऑब्जेक्ट मॉडल (सीओएम) सॉफ़्टवेयर घटक को सक्रियण मेटा डेटा और CLSID को संग्रहीत करने की अनुमति देती है (Class ID) विंडोज़ रजिस्ट्री का उपयोग किए बिना घटक के लिए। इसके बजाय, घटक में लागू वर्गों के मेटाडेटा और सीएलएसआईडी को एक मेनिफेस्ट (सीएलआई) (एक्सएमएल का उपयोग करके वर्णित) में घोषित किया जाता है, या तो निष्पादन योग्य संसाधन के रूप में या घटक के साथ स्थापित एक अलग फ़ाइल के रूप में संग्रहीत किया जाता है।[15] यह एक ही घटक के कई संस्करणों को अलग-अलग निर्देशिकाओं में स्थापित करने की अनुमति देता है, जो उनके स्वयं के प्रकटीकरण के साथ-साथ XCOPY परिनियोजन द्वारा वर्णित है।[16] इस तकनीक में EXE सीओएम सर्वरों के लिए सीमित समर्थन है[17] और सिस्टम-व्यापी घटकों जैसे माइक्रोसॉफ्ट डेटा एक्सेस घटक, MSएक्सएमएल, डायरेक्टX या Iएनटीerनेट Explorer के लिए उपयोग नहीं किया जा सकता है।

एप्लिकेशन लोड होने के दौरान, विंडोज लोडर मेनिफेस्ट की खोज करता है।[18] यदि यह मौजूद है, तो लोडर इससे सक्रियण संदर्भ में जानकारी जोड़ता है।[16]जब सीओएम क्लास फ़ैक्टरी किसी क्लास को इंस्टेंट करने की कोशिश करती है, तो सक्रियण संदर्भ को पहले यह देखने के लिए चेक किया जाता है कि क्या CLSID के लिए कार्यान्वयन पाया जा सकता है। केवल अगर लुकअप विफल हो जाता है, तो विंडोज़ रजिस्ट्री स्कैन की जाती है।[16]


मैन्युअल रूप से सीओएम ऑब्जेक्ट्स को इंस्टेंट करना

डायनेमिक-लिंक लाइब्रेरी फ़ाइल और ऑब्जेक्ट के GUID के पथ को देखते हुए सीओएम ऑब्जेक्ट मैन्युअल रूप से भी बनाए जा सकते हैं। इसके लिए डीएलएल या GUID को सिस्टम रजिस्ट्री में पंजीकृत करने की आवश्यकता नहीं है, और मेनिफेस्ट फ़ाइलों का उपयोग नहीं करता है। एक सीओएम डीएलएल डीएलएलGetClassObject नामक फ़ंक्शन निर्यात करता है। वांछित GUID और IID_IClassFactory के साथ डीएलएलGetClassObject को कॉल करना फ़ैक्टरी (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का एक उदाहरण प्रदान करता है। फ़ैक्टरी ऑब्जेक्ट में एक CreateInstance विधि है, जो एक अंतरापृष्ठ GUID दिए गए ऑब्जेक्ट के उदाहरण बना सकती है।[19] पंजीकृत सीओएम घटकों के उदाहरण बनाते समय आंतरिक रूप से उपयोग की जाने वाली यह वही प्रक्रिया है।[20] यदि बनाया गया सीओएम ऑब्जेक्ट जेनेरिक CoCreateInstance एपीआई का उपयोग करके किसी अन्य सीओएम ऑब्जेक्ट को तुरंत चालू करता है, तो यह रजिस्ट्री या मेनिफेस्ट फ़ाइलों का उपयोग करके सामान्य सामान्य तरीके से ऐसा करने का प्रयास करेगा। लेकिन यह आंतरिक वस्तुओं (जो बिल्कुल भी पंजीकृत नहीं हो सकता है) बना सकता है, और अपने स्वयं के निजी ज्ञान का उपयोग करते हुए, उन्हें अंतरापृष्ठ के संदर्भ सौंप सकता है।

प्रक्रिया और नेटवर्क पारदर्शिता

सीओएम ऑब्जेक्ट्स को पारदर्शी रूप से तत्काल और एक ही प्रक्रिया (इन-प्रोसेस) के भीतर, प्रक्रिया सीमाओं (आउट-ऑफ-प्रोसेस), या दूरस्थ रूप से नेटवर्क (डीसीओएम) पर संदर्भित किया जा सकता है। आउट-ऑफ-प्रोसेस और रिमोट ऑब्जेक्ट्स विधि कॉल को क्रमबद्ध करने और प्रक्रिया या नेटवर्क सीमाओं पर मान वापस करने के लिए क्रमबद्धता का उपयोग करते हैं। यह मार्शलिंग क्लाइंट के लिए अदृश्य है, जो ऑब्जेक्ट को एक्सेस करता है जैसे कि यह एक स्थानीय इन-प्रोसेस ऑब्जेक्ट था।

थ्रेडिंग

सीओएम में, थ्रेडिंग को एक अवधारणा के माध्यम से संबोधित किया जाता है जिसे अपार्टमेंट कहा जाता है।[21] एक व्यक्तिगत सीओएम ऑब्जेक्ट बिल्कुल एक अपार्टमेंट में रहता है, जो सिंगल-थ्रेडेड या मल्टी-थ्रेडेड हो सकता है। सीओएम में तीन प्रकार के अपार्टमेंट हैं: सिंगल थ्रेडिंग | सिंगल-थ्रेडेड अपार्टमेंट (STA), मल्टी-थ्रेडेड अपार्टमेंट (MTA) और थ्रेड न्यूट्रल अपार्टमेंट (NA)। प्रत्येक अपार्टमेंट एक तंत्र का प्रतिनिधित्व करता है जिससे किसी वस्तु की आंतरिक स्थिति को कई धागों में सिंक्रनाइज़ किया जा सकता है। एक प्रक्रिया में कई सीओएम ऑब्जेक्ट सम्मिलित हो सकते हैं, जिनमें से कुछ STA का उपयोग कर सकते हैं और अन्य MTA का उपयोग कर सकते हैं। सीओएम ऑब्जेक्ट तक पहुँचने वाले सभी थ्रेड समान रूप से एक अपार्टमेंट में रहते हैं। सीओएम ऑब्जेक्ट्स और थ्रेड्स के लिए अपार्टमेंट का चुनाव रन-टाइम पर निर्धारित होता है, और इसे बदला नहीं जा सकता।

अपार्टमेंट का प्रकार विवरण
सिंगल-थ्रेडेड अपार्टमेंट[22] ( STA), (ThreadingModel=Apartmeएनटी) वस्तु के तरीकों को निष्पादित करने के लिए एक एकल धागा समर्पित है। ऐसी व्यवस्था में, अपार्टमेंट के बाहर थ्रेड्स से विधि कॉल marshalled हैं और स्वचालित रूप से सिस्टम द्वारा कतारबद्ध हैं (एक मानक विंडोज संदेश कतार के माध्यम से)। इस प्रकार, सीओएम रन-टाइम यह सुनिश्चित करने के लिए स्वत: सिंक्रनाइज़ेशन प्रदान करता है कि किसी ऑब्जेक्ट की प्रत्येक विधि कॉल हमेशा दूसरे को लागू करने से पहले पूरा करने के लिए निष्पादित की जाती है। इसलिए डेवलपर को थ्रेड लॉकिंग या दौड़ की स्थिति के बारे में चिंता करने की ज़रूरत नहीं है।
मल्टी-थ्रेडेड अपार्टमेंट[23] ( एमटीए), (थ्रेडिंगमॉडल=फ्री) सीओएम रन-टाइम कोई सिंक्रनाइज़ेशन प्रदान नहीं करता है, और एकाधिक थ्रेड्स को सीओएम ऑब्जेक्ट को एक साथ कॉल करने की अनुमति है। इसलिए सीओएम ऑब्जेक्ट्स को दौड़ की स्थिति उत्पन्न करने से एकाधिक धागे से एक साथ पहुंच को रोकने के लिए अपना स्वयं का सिंक्रनाइज़ेशन करने की आवश्यकता होती है। किसी STA में किसी थ्रेड से किसी MTA ऑब्जेक्ट के लिए कॉल भी मार्शल किए जाते हैं।
गतिशील रूप से निर्धारित अपार्टमेंट (ThreadingModel=Both) दोनों अपार्टमेंट मोड में, सर्वर कॉलिंग थ्रेड के अपार्टमेंट प्रकार से मिलान करने के लिए वस्तु निर्माण पर STA या MTA का स्वतः चयन करता है।[24] यह ओवरहेड मार्शलिंग से बचने के लिए उपयोगी हो सकता है जब MTA सर्वर को STA थ्रेड द्वारा एक्सेस किया जाता है।
थ्रेड न्यूट्रल अपार्टमेंट (एनए), (थ्रेडिंगमॉडल=न्यूट्रल) बिना किसी नियत धागे के एक विशेष अपार्टमेंट। जब एक एसटीए या एमटीए थ्रेड एक एनए ऑब्जेक्ट को उसी प्रक्रिया में कॉल करता है, तो कॉलिंग थ्रेड अस्थायी रूप से अपना अपार्टमेंट छोड़ देता है और बिना किसी थ्रेड स्विचिंग के एनए में सीधे कोड निष्पादित करता है।[25] इसलिए, कोई भी कुशल इंटर-अपार्टमेंट विधि के लिए NA को एक अनुकूलन के रूप में सोच सकता है कॉल।

थ्रेड्स और ऑब्जेक्ट जो एक ही अपार्टमेंट से संबंधित हैं, समान थ्रेड एक्सेस नियमों का पालन करते हैं। मेथड कॉल्स जो एक ही अपार्टमेंट के अंदर की जाती हैं इसलिए सीधे सीओएम की सहायता के बिना की जाती हैं। अपार्टमेंट में किए गए मेथड कॉल मार्शलिंग के माध्यम से प्राप्त किए जाते हैं। इसके लिए प्रॉक्सी और स्टब्स के उपयोग की आवश्यकता होती है।

आलोचना

चूंकि सीओएम का कार्यान्वयन काफी जटिल है, प्रोग्रामर कुछ प्लंबिंग मुद्दों से विचलित हो सकते हैं।

संदेश पम्पिंग

जब एक STA को इनिशियलाइज़ किया जाता है तो यह एक छिपी हुई विंडो बनाता है जिसका उपयोग इंटर-अपार्टमेंट और इंटर-प्रोसेस मैसेज रूटिंग के लिए किया जाता है। इस विंडो की संदेश कतार नियमित रूप से पंप होनी चाहिए। इस निर्माण को एक संदेश पंप के रूप में जाना जाता है। विंडोज के पुराने संस्करणों पर, ऐसा करने में विफलता के कारण सिस्टम-वाइड गतिरोध हो सकता है। यह समस्या कुछ विंडोज़ एपीआई द्वारा जटिल है जो सीओएम को उनके कार्यान्वयन के हिस्से के रूप में प्रारंभ करते हैं, जो कार्यान्वयन विवरण के रिसाव का कारण बनता है।

संदर्भ गिनती

यदि दो या दो से अधिक ऑब्जेक्ट्स वृत्तीय संदर्भ हैं, तो सीओएम के भीतर रेफरेंस काउंटिंग में समस्या हो सकती है। किसी एप्लिकेशन के डिज़ाइन को इसे ध्यान में रखना चाहिए ताकि वस्तुओं को अनाथ न छोड़ा जाए। यदि सीओएम ईवेंट सिंक मॉडल का उपयोग किया जाता है, तो ऑब्जेक्ट को सक्रिय संदर्भ गणनाओं के साथ भी छोड़ा जा सकता है। चूँकि घटना को प्रारम्भ करने वाली वस्तु को घटना पर प्रतिक्रिया करने वाली वस्तु के संदर्भ की आवश्यकता होती है, बाद की संदर्भ संख्या कभी भी शून्य तक नहीं पहुँचेगी। संदर्भ चक्र सामान्यतः या तो आउट-ऑफ़-बैंड टर्मिनेशन या स्प्लिट आइडेंटिटी का उपयोग करके तोड़ा जाता है। आउट-ऑफ़-बैंड टर्मिनेशन तकनीक में, एक वस्तु एक विधि को उजागर करती है, जिसे जब कॉल किया जाता है, तो उसे अन्य वस्तुओं के संदर्भों को छोड़ने के लिए विवश करता है, जिससे चक्र टूट जाता है। विभाजन पहचान तकनीक में, एक एकल कार्यान्वयन दो अलग-अलग सीओएम ऑब्जेक्ट्स (जिन्हें पहचान के रूप में भी जाना जाता है) को उजागर करता है। यह एक संदर्भ चक्र को रोकने, सीओएम ऑब्जेक्ट्स के बीच एक कमजोर संदर्भ बनाता है।

डीएलएल नरक

क्योंकि इन-प्रोसेस सीओएम घटक डीएलएल फ़ाइलों में कार्यान्वित किए जाते हैं और पंजीकरण केवल CLSID प्रति एक संस्करण के लिए अनुमति देता है, वे कुछ स्थितियों में डीएलएल नरक प्रभाव के अधीन हो सकते हैं। पंजीकरण-मुक्त सीओएम क्षमता इन-प्रोसेस घटकों के लिए इस समस्या को समाप्त करती है; आउट-ऑफ़-प्रोसेस सर्वर के लिए पंजीकरण-मुक्त सीओएम उपलब्ध नहीं है।

यह भी देखें

टिप्पणियाँ

  1. "दस्तावेज़ीकरण संग्रह". developer.apple.com.
  2. "प्लग-इन और माइक्रोसॉफ्ट के COM". Apple Inc. Retrieved October 5, 2010.
  3. Microsoft forum: Binary compatibility across Visual C++ versions
  4. "नेटवर्क डीडीई के बारे में - विंडोज़ अनुप्रयोग". Microsoft.com. May 30, 2018.
  5. "Code Execution Technique Takes Advantage of Dynamic Data Exchange". McAfee.com. October 27, 2017.
  6. Brown, Nina; Kindel, Charlie (March 11, 1998). "draft-brown-dcom-v1-spec-03 - Distributed Component Object Model Protocol -- DCOM/1.0". Ietf Datatracker. Retrieved August 29, 2019.
  7. rpetrusha. "रनटाइम कॉल करने योग्य रैपर". msdn.microsoft.com.
  8. rpetrusha. "COM कॉल करने योग्य रैपर". msdn.microsoft.com.
  9. Steinberg, Jill (March 1, 1997). "कांटेदार पैनलिस्ट के लिए प्रतिस्पर्धी घटक बनाते हैं". JavaWorld. Retrieved 2020-07-16.
  10. "win32com Documentation Index". docs.activestate.com.
  11. "पायथन और कॉम". www.boddie.org.uk.
  12. "कंपाइलर कॉम सपोर्ट". MSDN. Microsoft.
  13. Microsoft MSDN: C++ Attributes Reference
  14. MSDN Magazine: C++ Attributes: Make COM Programming a Breeze with New Feature in Visual Studio .NET
  15. "विधानसभा प्रकट". MSDN. Retrieved November 5, 2009.
  16. 16.0 16.1 16.2 Dave Templin. "क्लिकऑन और पंजीकरण-मुक्त COM के साथ ऐप परिनियोजन को सरल बनाएं". MSDN Magazine. Retrieved April 22, 2008.
  17. "किसी आउट-ऑफ़-प्रोसेस COM सर्वर का उसकी tlb फ़ाइल के बिना उपयोग कैसे करें". Retrieved April 16, 2011.
  18. "पृथक अनुप्रयोगों और साथ-साथ असेंबलियों की अवधारणा". MSDN. Retrieved February 5, 2016.
  19. Arkhipov, Mikhail (April 1, 2005). "पंजीकरण मुक्त कॉम". MSDN Blogs. Retrieved April 29, 2016.
  20. "DllGetClassObject प्रवेश बिंदु (COM)". MSDN. If a call to the CoGetClassObject function finds the class object that is to be loaded in a DLL, CoGetClassObject uses the DLL's exported DllGetClassObject function.
  21. Microsoft MSDN: Processes, Threads, and Apartments
  22. Microsoft MSDN: सिंगल-थ्रेडेड अपार्टमेंट
  23. Microsoft MSDN: मल्टीथ्रेडेड अपार्टमेंट्स
  24. Microsoft MSDN: us/library/ms809971.aspx COM थ्रेडिंग मॉडल को समझना और उपयोग करना
  25. Codeguru: /cpp/com-tech/activex/apts/article.php/c5529/Understanding-COM-Apartments-Part-I.htm COM अपार्टमेंट्स को समझना


संदर्भ


बाहरी संबंध