निर्यात करने के लिए डीएलएल का उपयोग करते समय मैं एक डीएल निर्यात वर्ग के आधार पर व्युत्पन्न कक्षा को परिभाषित करना चाहता हूं। आधार वर्ग प्रोजेक्ट ए में परिभाषित किया गया है, और व्युत्पन्न वर्ग__declspec (dllimport) के लिए अनसुलझा बाहरी प्रतीक वर्ग
सबसे पहले परियोजना बी में है, प्रोजेक्ट ए में, पूर्वप्रक्रमक MYDLL_BUILD परिभाषित किया गया है। और मैं निर्यात/आयात निर्दिष्ट करने के लिए एक हेडर फाइल का उपयोग करें:
class MYDLL_API DllObject
{
public:
virtual ~DllObject() {}
protected:
DllObject() { m_count = 3; }
private:
int m_count;
};
परियोजना बी में, पूर्वप्रक्रमक MYDLL_BUILD परिभाषित नहीं है:
#if !defined(MYDLL_BUILD)
# pragma comment(lib, "myDll.lib")
#endif
#if defined(MYDLL_BUILD)
# define MYDLL_API __declspec(dllexport)
#else
# define MYDLL_API __declspec(dllimport)
#endif
तब मैं आधार वर्ग परिभाषित करते हैं। यहाँ व्युत्पन्न वर्ग है:
class MyClass : public DllObject
{
public:
~MyClass(){}
MyClass() { m_data = 20; }
private:
int m_data;
};
मैं dll और lib फ़ाइल को शामिल किया है, लेकिन अभी भी मैं अनसुलझे बाह्य प्रतीक त्रुटि मिलती है:
2>Test_Entry.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall ADAI::DllObject::~DllObject(void)" ([email protected]@@[email protected]) referenced in function "public: virtual __thiscall MyClass::~MyClass(void)" ([email protected]@[email protected])
2>Test_Entry.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) protected: __thiscall ADAI::DllObject::DllObject(void)" ([email protected]@@[email protected]) referenced in function "public: __thiscall MyClass::MyClass(void)" ([email protected]@[email protected])
2>c:\Users\Adai\Documents\Visual Studio 2010\Projects\Test_Main\Debug\Test_Main.exe : fatal error LNK1120: 2 unresolved externals
मैं ऑनलाइन खोज की, अधिकतर उत्तर का दावा है कि lib लापता है लेकिन वे निर्देश मेरी समस्या का समाधान नहीं करते हैं।
जब मैं बदल
class MYDLL_API DllObject
class __declspec(dllexport) DllObject
का हल कोई त्रुटि के साथ संकलित करता है। मैं वास्तव में कारण समझ में नहीं आता। क्या कोई मदद कर सकता है? अग्रिम में धन्यवाद।
लगता है कि 'एडीएलएल_एपीआई' को प्रोजेक्ट ए में परिभाषित नहीं किया जा रहा है जैसा कि आप इसकी उम्मीद कर रहे हैं। फ़ाइल के प्रीप्रोसेस्ड संस्करण को उत्पन्न करने के लिए वीएस प्राप्त करें जिसमें DllObject परिभाषित किया गया है (फ़ाइल पर राइट क्लिक करें, गुणों पर जाएं, सी/सी ++ का विस्तार करें और प्रीप्रोसेसर विकल्पों में देखें)। सुनिश्चित करें कि आउटपुट में 'वर्ग __declspec (dllexport) DllObject' है और' वर्ग __declspec (dllimport) DllObject' – Praetorian
नहीं है जो आपके द्वारा पोस्ट किए गए कोड स्निपेट के लिए लिंकर त्रुटियां उत्पन्न नहीं की जा सकती हैं। आपने हेडर फ़ाइल में कोड लिखा था। तो जब आप इसे शामिल करते हैं, तो डीएलएल के सभी पर कोई निर्भरता नहीं है। Lib। यदि हम वास्तविक कोड को नहीं देख रहे हैं, तो यह बस आपके जैसा लगता है कि किसी भी तरह से _DDL_BUILD को सही तरीके से परिभाषित नहीं किया गया है। –
उत्तर देने के लिए धन्यवाद। DllObject में केवल एक हेडर फ़ाइल है, कोई सीपीपी फ़ाइल नहीं है। मैं DllObject के लिए एक preprocessed फ़ाइल उत्पन्न नहीं कर सकता। प्रीप्रोसेसर MYDLL_BUILD को प्रोजेक्ट ए के गुणों में परिभाषित किया गया है। उपरोक्त चिपकाए गए कोड वास्तविक कोड हैं, लेकिन यह केवल वह हिस्सा है जो मुझे त्रुटि संदेश से संबंधित लगता है। – Chtoucas