यदि मैं एक ही डीएलएल को लगातार 3 बार लोड करने के लिए Win32 API लोड लाइब्रेरी का उपयोग करता हूं तो उसे 3 अलग-अलग हैंडल लौटाएंगे और प्रत्येक लाइब्रेरी में फ़ंक्शंस को अलग-अलग पते सही होंगे? (या यह कुछ "स्मार्ट" करता है और पता लगाता है कि क्या डीएलएल पहले से ही प्रक्रिया के लिए लोड हो चुका है और बस उसी मॉड्यूल को इंगित करता है?)क्या लोड लाइब्रेरी विशिष्ट उदाहरण बनाती है?
उत्तर
यह कुछ स्मार्ट करता है। विंडोज लोडलोडर के माध्यम से लोड प्रत्येक डीएलएल के लिए संदर्भ संख्या रखता है। यही कारण है कि आपको प्रत्येक संबंधित लोड लाइब्रेरी कॉल के लिए एक बार फ्री लाइब्रेरी को कॉल करना होगा। मान लें कि आप पहले डीएलएल को मुक्त नहीं करते हैं, लोड लाइब्रेरी में प्रत्येक कॉल आपको एक ही संभाल देगा।
FreeLibrary के लिए MSDN प्रलेखीकरण से:
प्रत्येक प्रक्रिया प्रत्येक लोड पुस्तकालय मॉड्यूल के लिए एक संदर्भ गिनती बनाए रखता है। जब भी लोड लाइब्रेरी बुलाया जाता है और हर बार फ्री लाइब्रेरी कहलाता है तो यह संदर्भ गणना बढ़ जाती है।
यदि वे एक ही डीएलएल हैं, तो यह फिर से लोड नहीं होगा।
http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx
"निर्दिष्ट मॉड्यूल एक DLL कि पहले से ही बुला प्रक्रिया के लिए लोड नहीं है है, तो सिस्टम DLL_PROCESS_ATTACH मूल्य के साथ DLL के DllMain फ़ंक्शन को कॉल। DllMain सही देता है, तो LoadLibrary करने के लिए एक संभाल रिटर्न मॉड्यूल। यदि DllMain FALSE लौटाता है, तो सिस्टम प्रक्रिया पता स्थान से DLL को अनलोड करता है और लोड लाइब्रेरी शून्य देता है। DllMain से LoadLibrary को कॉल करना सुरक्षित नहीं है। अधिक जानकारी के लिए, DllMain में टिप्पणियां अनुभाग देखें। "
"यदि एलपीफ़ाइलनाम में पथ शामिल नहीं है और उसी आधार नाम और एक्सटेंशन के साथ एक से अधिक लोड मॉड्यूल हैं, तो फ़ंक्शन पहले लोड किए गए मॉड्यूल में एक हैंडल देता है।"
नहीं, ऐसा नहीं है। इसके आस-पास पहुंचने के लिए, आप .dll को एक अस्थायी फ़ाइल में कॉपी कर सकते हैं (जितनी बार आपको .dll लोड करने की आवश्यकता होती है) और फिर एक बार पूरा होने के बाद फ़ाइलों को हटा दें।
- 1. क्या मुक्केबाजी .NET में कचरा बनाती है?
- 2. साझा लाइब्रेरी के दो उदाहरण लोड हो रहे हैं
- 3. क्या कोई सार संपत्ति निजी बैकिंग फ़ील्ड बनाती है?
- 4. लोड लाइब्रेरी एक एलपीसीटीआरटी
- 5. लाइब्रेरी लोड नहीं हुई
- 6. जार से लोड लाइब्रेरी
- 7. Agile दस्तावेज़ीकरण के विशिष्ट उदाहरण?
- 8. Jquery लोड, एक विशिष्ट वर्ग
- 9. क्या लगातार दस्तावेज़ीकरण की जांच आपको खराब कोडर बनाती है?
- 10. क्या टेराकोटा जेएमएस को एक अनियंत्रित परत बनाती है?
- 11. बैकट्रैकिंग एल्गोरिदम गैर-निर्धारिती क्यों बनाती है?
- 12. dyld isuess (लाइब्रेरी लोड नहीं)
- 13. libg2c लाइब्रेरी क्या है?
- 14. साझा लाइब्रेरी की कई प्रतियां लोड करें
- 15. लाइब्रेरी लोड करने पर एंडइंजिन त्रुटि
- 16. बैकएंड-विशिष्ट ऑपरेटर के साथ लगातार उदाहरण
- 17. सी रनटाइम लाइब्रेरी क्या है?
- 18. गतिशील रूप से लोड की गई लाइब्रेरी
- 19. dyld: लाइब्रेरी लोड नहीं हुई:/सिस्टम/लाइब्रेरी/फ़्रेमवर्क/अकाउंट.फ्रेमवर्क/एक्सेस
- 20. रूबी डीएसएल (डोमेन विशिष्ट भाषा) भंडार, उदाहरण
- 21. सी ++ 11 लाइब्रेरी फीचर्स कंपाइलर विशिष्ट प्रॉक्सी
- 22. फोरट्रान में साझा लाइब्रेरी, न्यूनतम उदाहरण
- 23. एक विशिष्ट बूस्ट लाइब्रेरी को संकलित करना
- 24. स्टेटिक लाइब्रेरी दो बार लोड की गई
- 25. अभी भी dyld: लाइब्रेरी लोड नहीं
- 26. एंड्रॉइड - लाइब्रेरी लोड करने में विफलता
- 27. डीएलएल लोड लाइब्रेरी - त्रुटि कोड 126
- 28. क्या लोड लाइब्रेरी, फ्री लाइब्रेरी और GetModule हैंडल Win32 फ़ंक्शन थ्रेड सुरक्षित हैं?
- 29. विजुअल स्टूडियो लोड हो रहा है यूआई लाइब्रेरी
- 30. Prolog- फ़ाइल से एक लाइब्रेरी लोड हो रहा है
ध्यान दें कि यदि आप एक ही डीएलएल को हल करने वाले विभिन्न पथों का उपयोग करते हैं तो कई उदाहरण प्राप्त करना संभव है, लेकिन अधिकांश लोग इसमें भाग नहीं लेते हैं। – Michael
अच्छा पकड़ो। धन्यवाद, माइकल। –
मेरी सामान्य नीति फ्री लाइब्रेरी को कभी भी कॉल नहीं करना है। यह जानना अच्छा होता है कि उपयोगकर्ता आवश्यकतानुसार अधिक लीक किए बिना लोड लाइब्रेरी को कई बार कॉल कर सकता है। (एप्लिकेशन टर्मिनेशन से पहले आप वास्तव में लाइब्रेरी को कितनी बार अनलोड करना चाहते हैं? जोखिम मूल्य से अधिक है)। – CashCow