2009-07-26 3 views
5

ठीक ..... मैंने संबंधित प्रश्नों, और कुछ एमएसडीएन लेखों और लगभग एक दिन के गुगलिंग के बारे में सभी पढ़ाई की है।डीएलएल और एसटीएल और स्थिर डेटा (ओह मेरा!)

क्या इस सवाल का जवाब वर्तमान "कला के राज्य" है:

मैं वी.एस. 2008, सी ++ अप्रबंधित कोड का उपयोग कर रहा हूँ। मेरे पास कुछ डीएलएल और कुछ EXEs के साथ एक समाधान फ़ाइल है। जब तक मैं निर्माण वातावरण को पूरी तरह से नियंत्रित करता हूं, जैसे कि सभी टुकड़े और हिस्सों को एक ही झंडे के साथ बनाया जाता है, और समान रनटाइम मुक्ति का उपयोग करते हैं, और किसी के पास स्थिर रूप से लिंक की गई सीआरटी लाइब्रेरी नहीं है, क्या मैं एसटीएल ऑब्जेक्ट्स को पास करना ठीक हूं?

ऐसा लगता है कि यह ठीक होना चाहिए, लेकिन आप जिस लेख को पढ़ते हैं उसके आधार पर, बहुत सारे भय, अनिश्चितता और संदेह हैं।

मुझे पता है कि टेम्पलेट्स के साथ सभी प्रकार की समस्याएं हैं जो दृश्यों के पीछे स्थिर डेटा उत्पन्न करती हैं (प्रत्येक डीएल को अपनी प्रतिलिपि मिल जाएगी, जिससे दिल दर्द हो सकता है), लेकिन नियमित पुराने एसटीएल के बारे में क्या?

+0

नोट करें कि वीएस एसटीएल हेडर फाइलें कैसे लिखने योग्य मोड में आती हैं; जब एक हेडर फ़ाइल में एक आकस्मिक कीस्ट्रोक होता है, और आपका सिस्टम अन्य सभी से अलग होता है! मैं चिंता साझा करता हूं ... – xtofl

उत्तर

1

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

हमारे द्वारा जांच की जाने वाली सेटिंग्स निम्नानुसार हैं। ध्यान दें कि इनमें से सभी मुद्दों का कारण नहीं बनेंगे, लेकिन हम उन्हें स्थिरता के लिए जांचते हैं।

#defines

_WIN32_WINNT 
STRICT 
_WIN32_IE 
NDEBUG 
_DEBUG 
_SECURE_SCL 

संकलक विकल्प

DebugInformationFormat 
WholeProgramOptimization 
RuntimeLibrary 
6

जब तक वे सभी रनटाइम डीएलएल के सटीक संस्करण का उपयोग करते हैं, तब भी एसटीएल के साथ कोई समस्या नहीं होनी चाहिए। लेकिन एक बार जब आप कई बार होते हैं, तो वे उदाहरण के लिए अलग-अलग ढेर का उपयोग करेंगे - जिससे परेशानियों का कोई अंत नहीं होता है।

+0

+1: मैं वास्तव में एरिक एच का वर्णन करता हूं और यह सब मेरे लिए काम करता है। – RichieHindle

0

हम अपने आवेदन में एसटीएल संग्रह का उपयोग करें और उन्हें और विभिन्न DLLs में तरीकों (आमतौर पर संदर्भ के रूप में) से गुजरती हैं। इससे कोई परेशानी नहीं होती है।

एकमात्र ऐसा क्षेत्र जहां हमें परेशानी थी, वह एक डीएलएल स्मृति आवंटित करता है और दूसरा डीएल इसे हटाने की कोशिश करता है। यह केवल खराब के रूप में रिपोर्ट किया जाता है, लेकिन मुझे यकीन नहीं है कि क्यों। हालांकि यह केवल डीबग बिल्ड (जहां इसकी सूचना दी गई है) पर एक समस्या प्रतीत होती है, लेकिन अभी भी रिलीज बिल्ड पर काम करती है। यह कहकर कि मैं कभी भी इस पर आ गया हूं, मैं इसे ठीक करता हूं।

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

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