2009-02-17 12 views
7

शायद एक साधारण सवाल है, लेकिन मेरे पास केवल इस कोड का परीक्षण करने के लिए लिनक्स है जहां __declspec (dllexport) की आवश्यकता नहीं है। वर्तमान कोड में __declspec (dllexport) .h फ़ाइल में सभी फ़ाइलों के सामने है, लेकिन सीपीपी फ़ाइल में केवल 50% कार्यों के सामने है, इसलिए मुझे आश्चर्य है कि क्या उन्हें वास्तव में सीपीपी फ़ाइल में जरूरी है?सीपीपी फाइलों में __declspec (dllexport) की आवश्यकता है

उत्तर

11

नहीं, इसकी केवल शीर्षलेख में आवश्यक है।

यहां अधिक जानकारी के साथ link है।

विनय क्या कह रहा था पर विस्तार, मैं अक्सर देखा है किसी मैक्रो अपने हेडर में निर्धारित

#if defined(MODULENAME_IMPORT) 
#define EXPORTED __declspec(dllimport) 
#elif defined(MODULENAME_EXPORT) 
#define EXPORTED __declspec(dllexport) 
#endif 

तो फिर तुम

तदनुसार परिभाषित सेट परियोजना के लिए परियोजना सेटिंग्स में क्या आयात/निर्यात कर रहे हैं।

5

नहीं, यह सीपीपी फ़ाइल में आवश्यक नहीं है। केवल घोषणा में ही इसकी आवश्यकता है।

उदाहरण के लिए यदि मेरे पास कक्षा सीएम क्लास है। यदि मैं यह तो निर्यात करना चाहते हैं ज

ज सर्वर कोड

__declspec (dllexport) CMyClass { } होगा;

जो इस वर्ग के रूप में आप

क्लाइंट कोड

__declspec (dllimport) CMyClass वर्ग घोषित अग्रेषित करने के लिए है का उपयोग करता है ग्राहक कोड, यानी, में;

// कोड वर्ग

2

उपयोग करने के लिए आप भी .cpp फ़ाइल में उपयोग कर सकते हैं जब आप कोड टेम्प्लेट की गई है और आप .cpp फ़ाइल में instantiating कर रहे हैं तो आप परिभाषा निर्यात करने के लिए जब यह instantiated है की जरूरत है। लेकिन यहां तक ​​कि इस मामले में, मैंने देखा है कि .h में भी काम करता है। विंडोज़ पर आप dumpbin.exe/export * .dll का उपयोग कर सकते हैं यह देखने के लिए कि कौन से हस्ताक्षर निर्यात किए जाते हैं, लिनक्स में भी समान उपयोगिता है। यह आपको एक विचार देगा कि हस्ताक्षर कैसे निर्यात किया जाता है।

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