2013-08-29 8 views
5

मैं अपने आवेदन निम्नलिखित तरीके की स्थापना के लिए अपने समाधान है साझा करने - (i दृश्य स्टूडियो का उपयोग कर रहा है और इस एक कुलपति ++ परियोजना है)exe ​​और dll एक ही स्थिर पुस्तकालयों

App Library dependency diagram

नोट: ब्लू परियोजनाओं स्थिर पुस्तकालयों के रूप में संकलित हैं।

जैसा कि आप देख सकते हैं, एक्सई और डीएल कुछ स्थिर पुस्तकालयों (कोर.लिब और utils.lib) साझा करता है और एक्सई इन-टर्न डीएलएल का उपयोग करता है (आयात लाइब्रेरी का उपयोग करके "लोड टाइम डायनामिक लिंकिंग" के माध्यम से)।

मेरा प्रश्न यह है कि यह सही निर्भरता-सेटअप है? मुझे जो समस्या दिखाई देती है वह है, जब यह ऐप चालू होता है और चल रहा है, तो प्रक्रिया पता स्थान में कुछ डुप्लिकेट कोड सही होगा? मतलब, Core.lib और Utils.lib में मौजूद सभी फ़ंक्शन दो बार सही दिखाई देंगे? कॉस, एक्स और डीएलएल में यह कोड अलग-अलग संकलित होगा।

यदि हां, उपरोक्त मुद्दे से निपटने का एक तरीका है कोड को विशेष रूप से डीएलएल में ले जाना या एक्सई में रखना और इसे आयात/निर्यात के माध्यम से (बी/डब्ल्यू एक्सई और डीएल) साझा करना है। लेकिन मेरे पास कोर और यूटिल में कई क्लास ऑब्जेक्ट्स हैं और मुझे इन क्लास ऑब्जेक्ट्स को निर्यात/आयात करने का विचार पसंद नहीं है (हेडर फाइलों में __declspec (dllimport/dllexport) को जोड़कर) और इसके अलावा मैं इसे बहुत से आश्रित में जोड़ सकता हूं कक्षा वस्तुओं

यह मेरी समझ है और मैं गलत हो सकता हूं। कृपया सुधारों का सुझाव दें और ऐसी समस्याओं से निपटने के लिए सामान्य दृष्टिकोण क्या है?

सादर,

+2

मुझे यह "समस्या" थी और फैसला किया कि, जब तक डुप्लिकेट कोड अपेक्षाकृत छोटा था, यह स्वीकार्य था। यदि डुप्लिकेट कोड पर्याप्त है, तो आपको इसे साझा लाइब्रेरी के रूप में बंडल करना चाहिए ... लेकिन फिर आप संभावित रूप से निर्भरता नरक में भाग लेते हैं यदि 'Algo-DLL 'लाइब्रेरी के एक अलग संस्करण की अपेक्षा करता है, तो ऐप' की तुलना में। –

उत्तर

0

हाँ, कोर और Utils कोड में दोहराया जाएगा। उन्हें स्थिर libs के रूप में बनाने के बजाय आप उन्हें डीएलएस के रूप में बना सकते हैं और कहीं भी उपयोग कर सकते हैं।

1

यदि आप डीएलएल जाते हैं तो आपको डीएलएल को सभी तरह से जाना चाहिए, सभी निर्भरताओं को सी-रनटाइम तक नीचे जाना चाहिए। कोड डुप्लिकेशन (मेमोरी पदचिह्न) सबसे खराब समस्या नहीं है। याद रखें, ऐप द्वारा आवंटित स्मृति को एक डीएल द्वारा मुक्त नहीं किया जा सकता है और इसके विपरीत, जब तक कि दोनों एक ही रनटाइम (डीएलएल) का उपयोग नहीं करते हैं।

0

मेरा सुझाव है: जब तक कोई समस्या बढ़ती है या परिवर्तन की अत्यधिक आवश्यकता नहीं होती है, तब तक इसे कोडिंग करना जारी रखें।

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