2010-08-16 21 views
17

की परिभाषा मैं एक वर्ग है, जो नीचे की तरह लग रहा है:सी ++ dllimport स्थिर डेटा सदस्य

//.h file 
class __declspec(dllimport) MyClass 
{ 
    public: 
    //stuff 
    private: 

    static int myInt; 
}; 

// .cpp file 
int MyClass::myInt = 0; 

मैं निम्नलिखित संकलन त्रुटि मिलती है:

error C2491: 'MyClass::myInt' : definition of dllimport static data member not allowed 

मुझे क्या करना चाहिए?

उत्तर

25

__declspec(dllimport) मतलब यह है कि वर्तमान कोड DLL है कि अपने वर्ग को लागू करता है का उपयोग कर है। इस प्रकार सदस्य कार्य और स्थैतिक डेटा सदस्यों को डीएलएल में परिभाषित किया जाता है, और उन्हें आपके प्रोग्राम में फिर से परिभाषित करना एक त्रुटि है।

यदि आप इस कक्षा को लागू करने वाले DLL के लिए कोड लिखने की कोशिश कर रहे हैं (और इस प्रकार सदस्य फ़ंक्शंस और स्थिर डेटा सदस्यों को परिभाषित करता है) तो आपको कक्षा __declspec(dllexport) को इसके बजाय चिह्नित करने की आवश्यकता है।

इसके लिए मैक्रो का उपयोग करना आम है। अपने डीएलएल का निर्माण करते समय आप एक मैक्रो BUILDING_MYDLL या इसी तरह परिभाषित करते हैं। MyClass के लिए अपने शीर्ष लेख में आप तो है:

#ifdef BUILDING_MYDLL 
#define MYCLASS_DECLSPEC __declspec(dllexport) 
#else 
#define MYCLASS_DECLSPEC __declspec(dllimport) 
#endif 

class MYCLASS_DECLSPEC MyClass 
{ 
    ... 
}; 

इसका मतलब यह है कि आप DLL और DLL का उपयोग करता है आवेदन के बीच शीर्ष लेख साझा कर सकते हैं।

+1

यहां [माइक्रोसॉफ्ट के पेज] (http://msdn.microsoft.com/de-de/library/8fskxacy.aspx) पर संबंधित उद्धरण है: "फ़ंक्शन घोषणाओं पर __declspec (dllimport) का उपयोग वैकल्पिक है [... ]। हालांकि, आपको DLL के सार्वजनिक डेटा प्रतीकों और ऑब्जेक्ट्स तक पहुंचने के लिए निष्पादन योग्य आयात करने के लिए __declspec (dllimport) का उपयोग करना होगा। ध्यान दें कि आपके DLL के उपयोगकर्ताओं को अभी भी एक आयात लाइब्रेरी से लिंक करने की आवश्यकता है। " –

0

यदि आप कक्षा आयात कर रहे हैं तो आप इसे सभी सदस्यों के साथ आयात कर रहे हैं, इसलिए "क्लाइंट साइड" पर किसी वर्ग के सदस्य को परिभाषित करना असंभव है। dllexport कीवर्ड कार्यान्वयन dll

4

MSDN Documentation से की ओर से इस्तेमाल किया जाना चाहिए,

When you declare a class dllimport, all its member functions and static data members are imported. Unlike the behavior of dllimport and dllexport on nonclass types, static data members cannot specify a definition in the same program in which a dllimport class is defined.

आशा है कि यह मदद करता है ..

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