लिंकर में -> डीएलएल प्रोजेक्ट का उन्नत प्रॉपर्टी टैब, सत्यापित करें कि आयात लाइब्रेरी (जिस .lib फ़ाइल को आप ढूंढ रहे हैं) के लिए मान सही/उचित है। इस संपत्ति का मूल्य निर्धारित करेगा कि आयात पुस्तकालय का नाम क्या है, और जहां लिंकर इसे लिख देगा।
आपको अपनी प्रोजेक्ट में एक आयात परिभाषा फ़ाइल (.def) उत्पन्न करने की आवश्यकता हो सकती है, या अपनी हेडर फाइलों की जांच करनी चाहिए और सुनिश्चित करें कि आपके निर्यात किए गए कार्यों को हेडर फ़ाइल में __declspec (dllexport) क्वालीफायर के साथ टैग किया गया हो। यह आमतौर पर इस तरह के रूप में एक #define द्वारा चालू किए जाने पर:
#ifdef MYAPI_EXPORTS
#define MYAPI_API __declspec(dllexport)
#else
#define MYAPI_API __declspec(dllimport)
#endif
void MYAPI_API foo(int bar);
मूल रूप से आप संकलक dllexport को देखने के लिए जब यह पुस्तकालय बनाने जा रहा है चाहता हूँ, लेकिन dllimport जब अपने ग्राहक कोड हेडर फाइल #including है। यदि विजुअल स्टूडियो ने मूल परियोजना संरचना उत्पन्न की है, तो शायद यह पहले से ही उपयोग करने के लिए एक उपयुक्त # परिभाषित बनाया गया है।
आपको दोनों को .def फ़ाइल बनाने और dllexport जोड़ने की आवश्यकता नहीं है, केवल एक या दूसरे। मैं बाद वाले को पसंद करता हूँ। साथ ही, यदि आप .def फ़ाइल का उपयोग करना चुनते हैं, तो आपको इसे अपनी लाइब्रेरी प्रोजेक्ट के लिंकर गुणों में निर्दिष्ट करना होगा।
मान $ (TargetDir) $ (TargetName) पर सेट है। Lib जो कि मेरे पास प्रोजेक्ट में मौजूद अन्य डीएलएस का वही मान है जो काम करता है। –
यह वास्तव में अजीब बात है, क्या आप आयात लाइब्रेरी निर्दिष्ट करने के लिए मैन्युअल रूप से कमांड लाइन स्विच (कमांड लाइन प्रॉपर्टी शीट में) जोड़ सकते हैं? जैसे /IMPLIB:C:\MyDll.lib? – Jeremy
मैंने जोड़ा कि लिंकर कमांड लाइन और कंपाइलर कमांड लाइन दोनों पर स्विच करें और निर्दिष्ट फ़ाइल नहीं बनाई गई है ... यह सिर्फ lib बनाने के लिए मना कर रहा है! –