मैं विंडोज प्रोग्रामिंग के लिए नया हूं और मैंने बस एक बग शिकार करने में दो घंटे "खो दिया" है, जिसे हर किसी के बारे में पता है: आप डीएलएल में ढेर पर ऑब्जेक्ट नहीं बना सकते हैं और इसे किसी अन्य डीएलएल में नष्ट कर सकते हैं (या मुख्य में कार्यक्रम)।क्या (स्थिर रूप से जुड़े) डीएलएल मुख्य कार्यक्रम की तुलना में एक अलग ढेर का उपयोग करते हैं?
मुझे यकीन है कि लिनक्स/यूनिक्स पर यह मामला नहीं है (यदि ऐसा है, तो कृपया इसे कहें, लेकिन मुझे पूरा यकीन है कि मैंने समस्याओं के बिना हजारों बार ऐसा किया है ...)।
1) स्थिर जुड़ा हुआ DLLs मुख्य कार्यक्रम से एक अलग ढेर का उपयोग करें:
इस बिंदु पर मैं सवालों की एक जोड़ी है?
2) क्या सांख्यिकीय रूप से जुड़े डीएलएल मुख्य कार्यक्रम की उसी प्रक्रिया स्थान में मैप किए गए हैं? (मुझे पूरा यकीन है कि यहां का जवाब एक बड़ा हां है अन्यथा यह मुख्य कार्यक्रम में किसी फ़ंक्शन से डीएलएल में फ़ंक्शन में गुजरने वाले पॉइंटर्स को समझ में नहीं आता है)।
मैं सादा/नियमित DLL, नहीं कॉम/ATL सेवाओं
संपादित करें के बारे में बात कर रहा हूँ: द्वारा "स्थैतिक रूप से जुड़ा हुआ" मेरा मतलब है कि मैं DLL लोड करने के लिए LoadLibrary का उपयोग नहीं करते लेकिन मैं ठूंठ पुस्तकालय के साथ लिंक
यह प्रत्येक मॉड्यूल के लिए सेटिंग्स पर निर्भर करता है। आम तौर पर यदि दो मॉड्यूल गतिशील सीआरटी का उपयोग करते हैं तो वे ढेर साझा करते हैं क्योंकि दोनों के पास सीआरटी लोड होने का एक ही उदाहरण होता है। यदि कोई मॉड्यूल स्थैतिक सीआरटी का उपयोग करता है तो उसके पास स्वयं का ढेर होता है क्योंकि इसमें सीआरटी का अपना उदाहरण होता है जिसमें – Luke
@Luke - इसके अतिरिक्त, डायनामिक (डीएलएल) सीआरटी के विभिन्न संस्करणों का उपयोग करने के लिए विभिन्न मॉड्यूल के लिए संभव है, और इसलिए अलग ढेर। – Bukes
यदि आप इसके बारे में सोचते हैं, तो हर गैर-तुच्छ डीएलएल बहुत ही ढेर बना देगा। एक उदाहरण के रूप में ओपन पुस्तकालय ले लो। आप डेटा को बफर ऑब्जेक्ट में फ़ीड कर सकते हैं (lib डेटा की अपनी प्रति बना देता है), कुछ पैरामीटर सेट करें, और लाइब्रेरी ध्वनि बजाएगी - बढ़िया, आसान, सही, कोई चिंता नहीं। अब कल्पना करें कि _two_ प्रोग्राम लाइब्रेरी लोड करते हैं। डेटा कहां रखना है, इसका मालिक कौन है? भौतिक RAM के किस हिस्से में यह है? क्या मैं चाहता हूं कि "कुछ अन्य प्रोग्राम" मेरे प्रोग्राम के ढेर पर डेटा देखने (या संशोधित) करने में सक्षम हो? यदि यह आपके मुख्य मॉड्यूल के ढेर पर रहता है, तो आप परेशानी में हैं ... – Damon