2009-05-05 6 views
5

मैं समझता हूं कि CoCreateInstance दिए गए क्लास आईडी के लिए COM सर्वर पाता है, उस आईडी के लिए ऑब्जेक्ट इंस्टेंस बनाता है और उस ऑब्जेक्ट इंस्टेंस से इंटरफ़ेस पुनर्प्राप्त करता है। CoGetClassObject() क्लास आईडी के लिए COM सर्वर पाता है, उस क्लास आईडी के लिए क्लास फैक्ट्री का एक उदाहरण बनाता है और उस क्लास फ़ैक्टरी इंटरफ़ेस को पुनर्प्राप्त करता है जिसका उपयोग वास्तविक ऑब्जेक्ट्स बनाने के लिए किया जा सकता है।उसी मशीन पर ऑब्जेक्ट्स बनाते समय CoCreateInstance() और CoGetClassObject() के बीच क्या अंतर है?

उसी मशीन पर ऑब्जेक्ट्स बनाने के लिए उपयोग किए जाने पर इन कार्यों को और कैसे भिन्न किया जाता है? क्या वे वैसे ही काम करते हैं लेकिन एक ही COM सर्वर में केवल अलग-अलग कोड डालने का कारण बनता है?

उत्तर

8

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

CoGetClassObject पर एमएसडीएन अनुभाग इस बारे में एक संक्षिप्त चर्चा है कि आप इस कार्यक्षमता का लाभ कैसे उठा सकते हैं।

+0

मैंने इसे पढ़ लिया है, लेकिन मुझे CoGetClassObject() को संभावित रूप से तेज़ होने के अलावा कोई भी लाभ नहीं दिख रहा है और क्लास फैक्ट्री ऑब्जेक्ट CreateInstance() कॉल के बीच राज्य को बनाए रखने में सक्षम है। – sharptooth

+1

@ शार्पतोथ, यह बहुत अधिक है। इस पर बहुत अधिक लाभ नहीं है, यही कारण है कि आप इसे शायद ही कभी इस्तेमाल करते हैं। – JaredPar

+0

क्या कोई मौका है कि निर्भरता की तलाश करने के क्रम में कुछ अन्य सूक्ष्म अंतर है? क्या ये फ़ंक्शन एक ही काम करते हैं लेकिन एक ही COM सर्वर में बस अलग कोड को कॉल करते हैं? – sharptooth

1

एक परिदृश्य - CoGetClassObject आप एक वर्ग कारखाने रिटर्न (कॉल DLLGetClassObject inproc सर्वर के मामले में अपने DLL के समारोह का निर्यात)। क्लास फैक्ट्री का उपयोग कोक्लास को तुरंत चालू करने के लिए किया जाता है। CoCreateInstance आंतरिक रूप से CoGetClassObject को कॉल करता है, आवश्यक वर्ग फैक्ट्री प्राप्त करता है और फिर आपके द्वारा अनुरोधित कोक्लस को तुरंत चालू करने के लिए इसका उपयोग करता है। CoCreateInstance को कॉल करते समय, आप कोकलास के निर्माण में देरी नहीं कर सकते हैं। ऐसे समय होते हैं जब कोक्लास का निर्माण महंगा हो सकता है और आप इसकी सृजन में देरी करना चाहते हैं लेकिन फिर भी कक्षा कारखाने तक पहुंच है ताकि आप मांग पर कोक्लस को तुरंत चालू कर सकें।

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