2008-11-04 10 views
9

ठीक है, इसलिए मैं वास्तव में एक एप्रोपोस शीर्षक के बारे में सोच नहीं सकता था जो इसका सारांश देता है।COM, VSTRIANT युक्त BSTR। कौन आवंटित करता है?

आईप्रिंट पाइपलाइनप्रॉपर्टीबैग इंटरफ़ेस में विधि एडप्रोपर्टी है जो उपयुक्त रूप से पर्याप्त है "एक संपत्ति बैग में एक संपत्ति जोड़ती है।"

http://msdn.microsoft.com/en-us/library/aa506384.aspx

AddProperty ([में, स्ट्रिंग] स्थिरांक wchar_t * pszName, स्थिरांक VARIANT * pVar [में]);

हम संपत्ति बैग में एक स्ट्रिंग जोड़ने के लिए निम्न कोड का उपयोग करते हैं।

CComVariant varProperty = CComBSTR(someString); 
pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename); 

यह बहुत स्पष्ट है, हालांकि, कि CComBSTR और CComVariant कि बनाई गई है कुछ समय के बाद क्षेत्र से बाहर चला जाता है। मुझे यकीन नहीं है कि प्रॉपर्टीबैग स्ट्रिंग को संभालती है और अपनी प्रतिलिपि बनाता है। चूंकि हम सभी प्रकार की सामग्री को एक वैरिएंट के अंदर स्टोर कर सकते हैं, यह मामला नहीं होना चाहिए।

मानते हुए स्ट्रिंग को संभाला नहीं जाता है, मेरा सवाल यह है कि COM में ऐसा करने के लिए पैटर्न क्या है? मुझे एक वैरिएंट को कैसे पास करना चाहिए जिसमें आवंटित स्ट्रिंग है, उस स्ट्रिंग को अन्य थ्रेड के लिए उपलब्ध कराएं, भले ही एडप्रोपर्टी नामक थ्रेड पहले मर जाए, और स्ट्रिंग को सही ढंग से आवंटित करें?

उत्तर

14

जब आप ज्यादातर मामलों में स्ट्रिंग या वैरिएंट के साथ COM फ़ंक्शन को कॉल करते हैं तो केवल गारंटी ही आवश्यक है कि वे ऑब्जेक्ट कॉल के दौरान ही उपलब्ध हों। कॉल के बाद, ऑब्जेक्ट स्वयं डेटा की प्रतिलिपि बनाने के लिए ज़िम्मेदार है। उदाहरण के लिए VARIANT की इच्छा अधिकतर वेरिएंटॉपी फ़ंक्शन का उपयोग करती है जो तारों की प्रतिलिपि बनायेगी, COM ऑब्जेक्ट्स कॉपी करें (संदर्भ गणना बढ़ जाती है)। एकमात्र चीज जिसके बारे में आपको चिंता करनी चाहिए वह है जब आप वैरिएंट में एक वास्तविक इंटरफ़ेस पास करते हैं: उस स्थिति में इंटरफ़ेस को उचित रूप से संदर्भित किया जाना चाहिए, और क्वेरी इंटेरफेस, एडआरफ, और रिलीज़ सभी को तदनुसार लागू किया जाना चाहिए। और रेफरेंस गिनती 0 तक पहुंचने से पहले उस ऑब्जेक्ट को कभी भी डिलीकेट न करें;)

संपादित करें: ओह, और यदि आप COM प्रोग्रामिंग के बारे में अधिक जानना चाहते हैं, तो "डॉन बॉक्स" द्वारा "आवश्यक COM" प्राप्त करना सुनिश्चित करें। डॉन बॉक्स COM गुरु है, और यह पुस्तक आपको लगभग कुछ भी सिखाएगी जो आप कभी भी COM और अधिक के बारे में जानना चाहेंगे;)

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