2009-01-25 16 views
9

विजुअल सी ++ में, जब मैं एक डीएलएल बनाता हूं, आउटपुट फाइलें .dll और .lib हैं।एक डीएलएल फ़ाइल बनाते समय, जेनरेट की गई LIB फ़ाइल में DLL नाम होता है?

.lib फ़ाइल में बनाया गया डीएलएल का नाम है।

मैं इस प्रश्न से पूछता हूं कि पुन: मैं यह कहता हूं: जब मैंने इस डीएल को आयात करके एक्सई चलाकर अपना एक्सई बनाया, तो एक्सई प्रक्रिया पता स्थान में इसे लोड करने के लिए डीएलएल का पता लगाने की कोशिश करता है।

जैसा कि हम प्रोजेक्ट गुणों में लाइब्रेरी नाम (.lib फ़ाइल) निर्दिष्ट करते हैं, exe को dll के नाम को कैसे पता चल जाता है।

नोट: मैं डंपबिन लिबररी फ़ाइल (.lib) और देखा कि इसमें डीएलएल का नाम नहीं है।

उत्तर

15

LIB फ़ाइल EXE में एक आयात तालिका में बदल दी गई है। यह में DLL का नाम होता है।

यदि आप dumpbin /all MyDLL.lib चलाते हैं तो आप इसे देख सकते हैं। ध्यान दें कि dumpbin MyDll.lib स्वयं कुछ भी उपयोगी नहीं दिखाता है: आपको /all का उपयोग करना चाहिए।

यह .LIB फ़ाइल में परिभाषित सभी अनुभाग दिखाता है। आप किसी भी .debug अनुभागों को अनदेखा कर सकते हैं, क्योंकि वे रिलीज़ बिल्ड में मौजूद नहीं होंगे। .LIB फ़ाइल में, .idata अनुभागों का संग्रह है। DLL परियोजना है कि मैं सिर्फ बनाया में, लिब फ़ाइल एक .idata$4 अनुभाग जो प्रतीकों EXE के आयात तालिका में रखा जाना करने के लिए, DLL नाम सहित परिभाषित करता है शामिल हैं:

Archive member name at 83E: MyDll.dll/  
497C3B9F time/date Sun Jan 25 10:14:55 2009 
     uid 
     gid 
     0 mode 
     2E size 
correct header end 

    Version  : 0 
    Machine  : 14C (x86) 
    TimeDateStamp: 497C3B9F Sun Jan 25 10:14:55 2009 
    SizeOfData : 0000001A 
    DLL name  : MyDll.dll 
    Symbol name : [email protected]@YAHXZ (int __cdecl fnMyDll(void)) 
    Type   : code 
    Name type : name 
    Hint   : 2 
    Name   : [email protected]@YAHXZ
+0

हाँ exe के आयात खंड में डीएल का नाम शामिल है। लेकिन जैसा कि आप कहते हैं पुस्तकालय से नाम पता है। तो, क्या आपका मतलब है कि पुस्तकालय में नाम है। यदि हां, तो मैं क्यों नहीं देखता कि जब मैं लाइब्रेरी डंपबिन करता हूं। –

+0

... क्योंकि आप सही ढंग से डंपबिन नहीं चला रहे हैं?/सभी स्विच पास करें, और फिर आपको जो भी शामिल है उसके समान आउटपुट देखना चाहिए। –

+0

धन्यवाद। मुझे अब अवधारणा मिलती है। –

2

हाँ, lib का नाम है DLL।

कार्यात्मक रूप से, आयात लाइब्रेरी LoadLibrary और GetProcAdress कॉल लागू करती है, और निर्यात किए गए कार्यों को उपलब्ध कराती है जैसे कि वे स्थिर रूप से जुड़े हुए हों।

खोज पथ LoadLibrary के लिए प्रलेखित के समान है, नाम निश्चित है, हालांकि।

0

रोजर और पीटर द्वारा बताए गए अनुसार, हाँ .lib फ़ाइल में .dll फ़ाइल का नाम होता है। और डंपबिन को इंगित करने के लिए रोजर को धन्यवाद। डीएलएल फ़ाइल का नाम दिखाता है, इससे मुझे मेरी समस्या का समाधान करने में मदद मिली। जो बताता है कि .lib फ़ाइल में नाम कहां से आता है।

मैं डीएल परियोजना के लिए परियोजना सेटिंग्स से नाम लेने की उम्मीद कर रहा था, लेकिन हमारे पास export.def था जो डीएल के लिए नाम निर्दिष्ट करता था। इसलिए जब हमने प्रोजेक्ट सेटिंग्स बदल दी, लेकिन export.def नहीं तो हमें हमारे डीएलएल का उपयोग करने में समस्याएं थीं। हमारी परियोजना का समाधान export.def फ़ाइल को मिटा देना था।

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