मैं Visual C++ में एक आयात लाइब्रेरी(.lib) और एक DLL कैसे बना सकता हूं?




visual-studio import (4)

क्या आपके डीएलएल प्रोजेक्ट में कोई वास्तविक निर्यात है? यदि कोई निर्यात नहीं है, तो लिंकर एक आयात लाइब्रेरी उत्पन्न नहीं करेगा। Lib फ़ाइल।

वीएस के गैर-एक्सप्रेस संस्करण में, आयात पुस्तकालय नाम यहां परियोजना सेटिंग्स में specfied है:

Configuration Properties/Linker/Advanced/Import Library

मुझे लगता है कि यह एक्सप्रेस में समान है (यदि यह नाम को कॉन्फ़िगर करने की क्षमता भी प्रदान करता है)।

मैं एक एकल विजुअल स्टूडियो प्रोजेक्ट बनाना चाहता हूं जो एक डीएलएल फ़ाइल और एक आयात लाइब्रेरी (.lib) फ़ाइल बनाता है। (एक आयात लाइब्रेरी एक स्थैतिक रूप से जुड़ी लाइब्रेरी है जो उस अन्य परियोजनाओं में डीएलएल फ़ाइल को लोड करने का ख्याल रखती है)।

तो मैं विजुअल स्टूडियो सी ++ 2008 एक्सप्रेस संस्करण में गया, टाइप क्लास लाइब्रेरी की एक नई परियोजना बनाई, और "कॉन्फ़िगरेशन टाइप" को "डायनामिक लाइब्रेरी (.dll)" सेट करने के लिए सेट किया।

लेकिन जब मैं समाधान का निर्माण करता हूं, तो मुझे देखने वाली एकमात्र प्रासंगिक आउटपुट फ़ाइल एक डीएलएल फ़ाइल है; मुझे उत्पन्न होने वाली कोई भी LIB फ़ाइल नहीं दिखाई दे रही है। मैंने प्रोजेक्ट निर्देशिका और सभी उपनिर्देशिकाओं (रिलीज और डीबग) में देखा।

मेरा मानना ​​है कि एक ही समय में एक एलआईबी और एक डीएलएल फाइल बनाना संभव है क्योंकि एमएसडीएन पर यह कहता है कि "लिंकर आयात पुस्तकालय बनाता है जब डीएलएल बनाया जाता है।" साथ ही, इस वेबसाइट का एक अन्य उपयोगकर्ता विज़ुअल सी ++ का उपयोग कर एक ही समय में LIB और DLL फ़ाइलों को बना रहा है

तो मैं यह कैसे कर सकता हूँ?


'क्लास लाइब्रेरी' चुनकर आप गलती से इसे C ++ के सीएलआई (प्रबंधित) extenstion का उपयोग कर नेट नेट लाइब्रेरी बनाने के लिए कह रहे थे।

इसके बजाय, एक Win32 प्रोजेक्ट बनाएं, और अगले पृष्ठ पर एप्लिकेशन सेटिंग्स में, 'DLL' चुनें।

यदि आप उस मार्ग पर जाना चाहते हैं तो आप उन लाइब्रेरी विकल्पों से एमएफसी डीएलएल या एटीएल डीएलएल भी बना सकते हैं, लेकिन ऐसा लगता है जैसे आप नहीं करते हैं।


ठीक है, तो मुझे http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ का उत्तर मिला है कि यह समस्या lib फ़ाइल बनाने के लिए प्रतीकों को निर्यात करने के तरीके पर किसी भी प्रतीकों और आगे के निर्देशों को निर्यात न करने के कारण हुआ था। ऐसा करने के लिए, अपने डीएलएल के लिए अपनी .h फ़ाइल में निम्न कोड जोड़ें।

#ifdef BARNABY_EXPORTS
#define BARNABY_API __declspec(dllexport)
#else
#define BARNABY_API __declspec(dllimport)
#endif

जहां BARNABY_EXPORTS और BARNABY_API आपकी परियोजना के लिए अद्वितीय परिभाषाएं हैं। फिर, आपके द्वारा निर्यात किए जाने वाले प्रत्येक फ़ंक्शन से पहले:

BARNABY_API int add(){
}

इस समस्या को या तो नए प्रोजेक्ट डीएलएल विज़ार्ड पर निर्यात सिंबल बॉक्स पर क्लिक करके या कंप्यूटर प्रोग्रामर के लिए लॉबोटोमीज़ के लिए हाँ वोट करके रोक दिया जा सकता था।


आपको यहां परियोजना सेटिंग्स में डीफ़ नाम भी निर्दिष्ट करना चाहिए:

कॉन्फ़िगरेशन> गुण / इनपुट / उन्नत / मॉड्यूल> परिभाषा फ़ाइल





import