linux - Calling static pointer to a list from a shared library in c++ -


मेरे पास एक स्थिर वर्ग सदस्य है

  वर्ग बार {...} class foo { सार्वजनिक: स्थिर QHash & lt; qint64, बार & gt; * बार रिफ एचश; }  

अब मैं एक फ़ंक्शन कॉल करता हूं जो इस सदस्य को साझा लाइब्रेरी के भीतर एक्सेस करता है, मुझे मेमोरी त्रुटि मिलती है, जबकि जब मैं मुख्य प्रोग्राम के माध्यम से फ़ंक्शन का उपयोग करता हूं, तो यह ठीक काम करता है। मैंने कई परिस्थितियों में इसे परीक्षण किया है।

मैं मुख्य अनुप्रयोग में चर को इनिशियलाइज़ करना चाहता हूं लेकिन मैं साझा लाइब्रेरी में इसे फिर से तैयार नहीं करता (यह अनावश्यक लग रहा था)।

मैं उबंटू में जीसीसी और क्यूटी का उपयोग कर रहा हूँ

क्या चल रहा है और मैं इसे कैसे ठीक कर सकता हूं? आईईआरसी को एक्सई और साझा लाइब्रेरी की तरह स्थिर सदस्य चर की अपनी प्रतियां मिल जाएंगी, और ये भी जैसे आपको इसे प्रत्येक मामले में अलग से प्रारंभ करने की आवश्यकता होगी।

चूंकि इसकी एक सूचक है, एक तरह से यह आपके मुख्य प्रोग्राम में सामान्य रूप से आरंभ करने के लिए हो सकता है और फिर जब आप इसे लोड करते हैं तो डोलो पर पॉइंटर को पास करें डीएलएल के संस्करण को एक ही स्थान पर एक्सई के रूप में इंगित करने के लिए सेट किया जा सकता है।

संपादित करें: ठीक है, मैंने कुछ परीक्षण किए (विंडोज़, वीसी 9), और ऐसा प्रतीत होता है कि ग्लोबल्स, और स्थिर वैरिएबल यह कार्य, वर्ग, जो कुछ भी) प्रति-मॉड्यूल हैं (अर्थात हर एक्स और डीएलएल इसकी अपनी प्रतिलिपि प्राप्त करेंगे, भले ही एक सामान्य स्रोत से आया, जैसे कि एक स्थैतिक लाइब्रेरी कहते हैं)।

मैं यह देखने के लिए कि क्या क्लाइंट पर डेलिमापोर्ट / निर्यात करता है, उन्हें एक सामान्य प्रतिलिपि का उपयोग करने के लिए परीक्षण करने जा रहा है।

EDIT2:

ठीक डीएलएल और __declspec (dllimport) में __declspec (dllexport) Exe में (पूर्वप्रक्रमक मैक्रोज़ का उपयोग उन दोनों के बीच स्विच करने के लिए) क्या हैडर शामिल है), स्थिर वैरिएबल घोषणा के लिए दोनों मॉड्यूल के लिए स्थिर वैरिएबल बना दिया। यह वैश्विक वैरिएबल के लिए भी काम करता है, और मैं स्थिर फ़ंक्शन चर को मानता हूँ।

  testprogma / DLL __declspec (dllimport) को परिभाषित करें test.cpp में #endif // foo और bar definition को परिभाषित करें, अर्थात केवल डीएलएल के कंपाइल वर्ग X {public: static int foo; }; DLL extern int बार;  

एपीएआईके जीसीसी के पास डलेप्लेपोर्ट और डेलिमपोर्ट नहीं है, हालांकि साझा लाइबबरी बनाने के दौरान इसके समान प्रभाव प्राप्त करने का कोई अन्य तरीका हो सकता है (हो सकता है कि यह डीएलएल हो)।

अगर ऐसा नहीं होता है, तो मुझे लगता है कि मैं पहले सुझाव दिया है, केवल एक ही अन्य समाधान है। Exe में अपने स्थिर सूचक को प्रारंभ करें, उसके बाद स्थिर वर्क सेट करने के लिए डीएलएल में एक फ़ंक्शन है, जो कि एक्सई पॉइंटर की उसकी कॉपी देकर कॉल कर सकता है।


Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

php - Multiple Select with Explode: only returns the word "Array" -

php - jQuery AJAX Post not working -