ठीक है, इसलिए मैं वास्तव में एक एप्रोपोस शीर्षक के बारे में सोच नहीं सकता था जो इसका सारांश देता है।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 में ऐसा करने के लिए पैटर्न क्या है? मुझे एक वैरिएंट को कैसे पास करना चाहिए जिसमें आवंटित स्ट्रिंग है, उस स्ट्रिंग को अन्य थ्रेड के लिए उपलब्ध कराएं, भले ही एडप्रोपर्टी नामक थ्रेड पहले मर जाए, और स्ट्रिंग को सही ढंग से आवंटित करें?