delphi - २०१७ - डेल्फी आवेदन के लिए प्लगइन्स सिस्टम-बीपीएल बनाम डीएलएल?




राशन कार्ड सूची (4)

मैं डेल्फी ऐप लिख रहा हूं जिसमें प्लगइन लोड करने की क्षमता होनी चाहिए। मैं प्लगइन सिस्टम / मैनेजर के रूप में JvPluginManager का उपयोग कर रहा हूं;) अब, नए प्लगइन विज़ार्ड में वे कहते हैं कि .dll प्लगइन्स के बजाय .bpl प्रकार प्लगइन्स का उपयोग करना बेहतर है ... इस समाधान के पेशेवरों को डीएलएल प्लगइन बनाम क्या हैं? अब तक मुझे इस समाधान का केवल विपक्ष मिला है:

  1. मुझे सभी सामान्य इंटरफ़ेस इकाइयों को अलग पैकेज में रखना होगा ताकि प्लगइन लोड करते समय यह सामान्य इकाई वाले अन्य पैकेज के बारे में कोई त्रुटि नहीं डालेगा

  2. यदि, मान लीजिए, प्लगइन डेवलपर्स में से एक कुछ प्रसिद्ध इकाई (जैसे synapse) का उपयोग करने का निर्णय लेता है, जिसमें डिफ़ॉल्ट रूप से रनटाइम पैकेज नहीं होता है, और दूसरी प्लगइन डेवलपर बंप की तुलना में वही करता है ... यह यहां क्रैश है। ..

तो, वास्तव में रनटाइम पैकेजों के साथ संकलित डीएलएस के बजाय बीपीएल का उपयोग करने के पेशेवर क्या हैं?

अग्रिम में धन्यवाद


आपका पहला कंस भी एक समर्थक है। यदि आप प्रत्येक डीएल में साझा कोड दोहराते हैं तो डीएलएस बड़ा और बड़ा हो जाता है। डीएलएस का उपयोग करते समय भी आप साझा कोड को एक अलग डीएल में ले जाकर इसे रोक सकते हैं।

पेशेवरों:

  1. प्रकार साझा किए जाते हैं। कोई TFont एक TFont समस्या नहीं है
  2. मेमोरी मैनेजर साझा किया जाता है। बिना किसी समस्या के प्लगइन के बीच पैरामीटर के रूप में स्ट्रिंग्स और कक्षाओं का उपयोग किया जा सकता है।

विपक्ष:

  1. प्लगइन्स केवल डेल्फी या बीसीबी का उपयोग करके बनाया जा सकता है।
  2. प्लगइन्स को उसी डेल्फी या बीसीबी संस्करण का उपयोग करना चाहिए।

क्या आपने COM का उपयोग करने पर विचार किया है? COM प्रकार, तार और कक्षाओं को साझा करना संभव बनाता है और प्लगइन कई प्रोग्रामिंग भाषाओं में लिखा जा सकता है।


जैसा कि सिकंदर ने कहा, एक बीपीएल मूल रूप से एक डीएलएल है। लेकिन कुछ स्थितियां हैं (मैंने किए गए एक संक्षिप्त सारांश से नहीं: http://wiki.freepascal.org/packages ):

  • एक इकाई केवल बीपीएल के + एक्स में एक बार मौजूद हो सकती है। इससे राज्य के दोहराव से बचा जाता है (हेपमेनगर और सिस्टम आदि के अन्य वैश्विक युद्ध, वीएमटी टेबल इत्यादि)
  • बीपीएल केवल अन्य का उपयोग कर सकते हैं। बीपीएल।
  • इसका मतलब है कि गतिशील प्रकार जैसे ansistring और IS / AS बीपीएल इंटरफेस पर ठीक से काम करते हैं।
  • प्रारंभ / अंतिमकरण अलग प्रक्रिया है और उनके प्रारंभिक आदेश को कड़ाई से नियंत्रित किया जाता है। स्थैतिक गतिशील लोडिंग के लिए यह आसान है, गतिशील लोडिंग (प्लगइन जैसी) इकाइयों पर सभी निर्भरताओं की जांच की जाती है।
  • सब कुछ अनिवार्य रूप से एक बड़ा कार्यक्रम है, जिसका अर्थ है कि बीपीएल को एक ही कंपाइलर संस्करण और आरटीएल के साथ संकलित किया जाना चाहिए और अन्य निर्भरताओं के संस्करणों पर निर्भर करता है। डेल्फी संस्करण से मेल खाना चाहिए क्योंकि बीपीएल को मौजूदा एक्सई में प्लगइन करना मुश्किल हो सकता है।
  • इसका यह भी अर्थ है कि आपको .dcp के लिए (गैर डेल्फी) वितरित करना होगा। प्लगइन प्लगइन .पीपीएल निर्भर करता है

संक्षेप में: यदि प्लगइन आर्किटेक्चर खुला है, तो इसे एक डीएलएल बनाएं। अन्यथा लोगों को प्लगइन लिखने के लिए एक ही डेल्फी संस्करण होना चाहिए।

हाइब्रिड भी संभव है। कार्यक्षमता के लिए एक उच्च स्तर बीपीएल इंटरफ़ेस जिसमें आप कारक हैं। बीपीएल स्वयं और चयनित डेवेल, और बाकी के लिए एक रॉक नीचे प्रक्रिया डीएलएल इंटरफ़ेस।

एक तीसरा विकल्प डीएलएल का उपयोग कर रहा है, लेकिन शेयरमेम को ऑर्डर करें। स्ट्रिंग काम करेंगे, कई डेल्फी संस्करण काम करेंगे। ऑब्जेक्ट्स काम कर सकते हैं लेकिन असुरक्षित हैं (उदाहरण के लिए मुझे लगता है कि पहले संस्करण के साथ डी 200 9 काम नहीं करेगा)। यहां तक ​​कि अन्य भाषा उपयोगकर्ता भी COM पर आवंटित करने में सक्षम हो सकते हैं, न कि पूरी तरह से गैर डेल्फी को छोड़कर।


ब्लैप दृष्टिकोण से बचें क्योंकि आपको अपने सॉफ्टवेयर के साथ बीपीएल का एक बड़ा बैग भेजना होगा और इस प्रकार, वितरण भारी हो जाएगा।

हम छोटे स्टैंड अकेले प्रोग्रामों को संकलित करने के लिए डेल्फी का उपयोग क्यों करते हैं जो किसी भी रनटाइम निर्भरता के बिना कहीं भी दौड़ते हैं। बीपीएल का उपयोग करना इस उद्देश्य को हरा देना है।

मुझे नहीं पता कि आप डीएलएल के साथ कितने आरामदायक हैं, लेकिन मैं आपको डीएलएल का उपयोग करने का सुझाव दूंगा।

  • इससे अन्य डेवलपर्स (जो आपके सॉफ़्टवेयर में दिलचस्पी ले सकते हैं) किसी भी विकास भाषा का उपयोग करने का मौका देंगे (जब तक कि वह भाषा अपने स्वयं के प्लगइन लिखने के लिए डीएल को थूक सकती है) जिसका उपयोग आपके विकसित सॉफ़्टवेयर में किया जा सकता है।
  • एक और बात यह है कि आपको डेल्फी के वीसीएल संस्करण निर्भरता अत्याचार से बचाया जाएगा। आज तक डेल्फी का एक प्रमुख कमजोर बिंदु।

मैं JvPluginManager से परिचित नहीं हूं, लेकिन यह इस बात पर निर्भर करता है कि आप बीपीएल का उपयोग कैसे करेंगे।

असल में, बीपीएल - सिर्फ एक सामान्य डीएलएल है, लेकिन इसके प्रारंभिक / अंतिमकरण कार्य को डेलमेन से अलग कार्यों में विभाजित किया जाता है: 'प्रारंभ करें' / 'अंतिमकरण'।

इसलिए, यदि आप सामान्य डीएलएल की तरह बीपीएल का उपयोग करने जा रहे हैं, तो ऐसे कोई विपक्ष नहीं हैं जिन्हें मैं जानता हूं, केवल पेशेवर: डेलमेन के साथ और कोई परेशानी नहीं होगी। बस इतना ही। एकमात्र अंतर।

लेकिन डेल्फी में बीपीएल भी कोड साझा करने का एक विश्वसनीय तरीका प्रदान करता है। इसका मतलब है महान फायदे (सामान्य स्मृति प्रबंधक, कोई डुप्लिकेट कोड, आदि, आदि)। तो सामान्य बीपीएल "सिर्फ एक डीएलएल होने" से बहुत कुछ करता है। लेकिन इसका यह भी अर्थ है कि अब आपकी प्लगइन प्रणाली केवल डेल्फी तक ही सीमित है (ठीक है, सी ++ बिल्डर भी हो सकता है)। Ie दोनों plugins और exe को आसानी से चलाने के लिए एक ही कंपाइलर में संकलित किया जाना चाहिए।

यदि यह आपके लिए स्वीकार्य है (यानी कोई एमएस विजुअल स्टूडियो, नहीं, महोदय, कभी नहीं) - फिर आगे बढ़ें, आप बीपीएल की सभी शक्तियों का उपयोग कर सकते हैं।

पीएस लेकिन ऐसे बीपीएल प्लगइन को अपग्रेड करना भी एक दुःस्वप्न हो सकता है, यदि आप इंटरफ़ेस पक्ष को ध्यान से डिज़ाइन नहीं करते हैं। कुछ सबसे बुरे मामलों में, आपको सब कुछ पुनः संयोजित करने की आवश्यकता हो सकती है। पीपीएस की तरह मैंने कहा: मुझे नहीं पता, यह प्लगइन पर कैसे लागू होता है, जिसे जेवीप्लगिन मैनेजर द्वारा बनाया गया है।