dll निर्यात हैडरइमारत 64 बिट dll के साथ एक चेतावनी
extern "C"
void _declspec(dllexport) __stdcall foo();
.def फ़ाइल
EXPORTS
foo @1
जब मैं 64 बिट का निर्माण config द्वारा dll का निर्माण, मैं इस चेतावनी को पूरा।
चेतावनी एलएनके 4197: निर्यात 'foo' कई बार निर्दिष्ट; पहले विनिर्देश का उपयोग
लेकिन अगर मैं 32 बिट बिल्ड कॉन्फ़िगर द्वारा डीएलएल बनाता हूं, तो चेतावनी कभी नहीं होती है।
समस्या क्या है? अंतर क्या है।
इंटरफेस के लिए dll हेडर में, हम आम तौर पर इस कलाओं,
#ifdef EXPORT_DLL
#define BASICAPI _declspec(dllexport)
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
का उपयोग लेकिन अगर डीईएफ़ फ़ाइल भी मौजूद है, हम हमेशा चेतावनी को पूरा जब हम 64 बिट dll का निर्माण कर रहे हो जाएगा।
तो, क्या हमें इस तरह के कोड लिखना चाहिए?
#ifdef EXPORT_DLL
#define BASICAPI
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
यह अच्छी तरह से काम करता है। लेकिन यह मुझसे परिचित नहीं है।
मुझे अपनी राय दें।
'64-बिट कंपाइलर नामों को सजाने नहीं करता है 'मुझे यह नहीं पता था। यही कारण था! धन्यवाद। – Benjamin
वैसे, मैं टिप्पणी बॉक्स में इटालिक फ़ॉन्ट का उपयोग कैसे कर सकता हूं। – Benjamin
यह * नामों को सजाने * करता है, यह सिर्फ 32-बिट कंपाइलर (यानी अग्रणी अंडरस्कोर के बिना) को अलग-अलग सजाता है। आप अलग-अलग नामों के साथ दो बार फ़ंक्शन निर्यात कर सकते हैं (यही वह है जो मुझे आपके 32-बिट बिल्डों में होने की उम्मीद है) चेतावनी इसलिए है क्योंकि 64-बिट बिल्ड में, '__declspec' और .def फ़ाइल दोनों के परिणामस्वरूप * निर्यात किया गया नाम - इसलिए उनमें से एक को अनावश्यक माना जाता है। –