2011-08-20 20 views
5

DELPHI एप्लिकेशन के लिए बाहरी मॉड्यूल सिस्टम को लागू करने का सबसे अच्छा तरीका क्या है?बाहरी मॉड्यूल कार्यान्वयन

मैं क्या जरूरत है वास्तव में बहुत ही बुनियादी है:

  • मुख्य एपीपी का पता लगाता है एक मॉड्यूल मौजूद है और भार यह (चलने का समय)
  • मॉड्यूल रूप स्टोर कर सकते हैं
  • मॉड्यूल DataModules
  • स्टोर कर सकते हैं
  • मॉड्यूल कोड

मुझे स्टोर के रूपों को अन्य रूपों के अंदर उपयोग करने की आवश्यकता है, और केवल स्टैंडअलोन

मैं इस

 if Assigned(pNewClass) then begin 
      Application.CreateForm(pNewClass, _lFrm); 
      _lFrm.Hide; 
      _lFrm.BorderStyle := bsNone; 
      _lFrm.Parent := pBasePNL //(TPanel); 
      _lFrm.Align := alClient; 
     end; 

की तरह कुछ का उपयोग तो मैं एक TForm बनाने के लिए, लेकिन एक TPanel के अंदर रखें।

डेटा मॉड्यूल के लिए मैं औपचारिक रूप से छविसूची स्टोर करता हूं, इसलिए विचारधारा आईसीओ को बाहरी मॉड्यूल को बदलने में थोड़ा बदलाव करना है।

तो इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?

रनटाइम बीपीएल पर देखा लेकिन यह समझ में नहीं आता कि यह कैसे करना है। धन्यवाद।

अद्यतन: .....................................

कुछ संबंधित प्रश्न और उत्तर पढ़ने के बाद मुझे लगता है कि मुझे अपना जवाब और समाधान मिला है।

http://edn.embarcadero.com/article/27178

लेख पुराने सामान लेकिन आश्चर्यजनक सरल है।

खैर तर्क है मैं सिर्फ यह रूप दिखाने के लिए प्राप्त करने के लिए नहीं लग रहे 

मैं सिर्फ उदाहरण 2

यह गरीबी रेखा से नीचे लोड हो जाता है, लेकिन फार्म नहीं मिलता है परीक्षण कर रहा हूँ:

AClass := GetClass('TForm2'); 

हमेशा retrievex 'शून्य'

लेकिन गरीबी रेखा से नीचे के रूप में यह पंजीकृत:

RegisterClass(TForm2); 

क्या कोई इस के साथ मदद कर सकता है।

+1

यदि आप प्लगइन्स –

+0

देखें तो आपको अधिक जानकारी मिल सकती है यह वास्तव में एक डुप्लिकेट है, बस –

+0

पर संबंधित प्रश्नों की सूची देखें, धन्यवाद। बस मेरा समाधान मिला। – Jlouro

उत्तर

2

मैंने आपको डेमो बनाया है, यह शुरू करना इतना आसान है! हालांकि ... शुरू नहीं हुआ है।

हर बार जब मैंने प्लगइन का उपयोग शुरू किया, तो मैंने बाद में खेद व्यक्त किया। हालांकि, जैसा कि आप कहते हैं, आप एक बाइनरी प्लगइन सिस्टम चाहते हैं। तो बीपीएल सही समाधान हैं। डेविड इंटरफेस (पूर्ण रनटाइम पैकेज बीपीएल के बजाए सादे डीएलएल के साथ) का उपयोग करने का सुझाव देता है और इससे आपकी कक्षाओं को संस्करणित न करने के कारण सामान्यतः बीपीएल-अस्थिरता समस्याओं में से कुछ हल हो जाएंगे, और इस प्रकार आपके एप्लिकेशन-एंड-पैकेज-बाइनरी-संगतता निर्भरताएं, अच्छी तरह। यदि आपको स्मृति साझा करने की आवश्यकता नहीं है और borlandmm.dll (साझा स्मृति प्रबंधन) का उपयोग करने की आवश्यकता नहीं है तो इंटरफेस के साथ एक सीधा डीएलएल ठीक काम करेगा।

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

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

यदि आप सही ढंग से बीपीएल पैकेज का उपयोग करते हैं, और आप अपने प्लगइन को सही तरीके से संस्करण देते हैं, तो सब कुछ ठीक है। बीपीएल महान हैं। लेकिन वास्तविक दुनिया में, ऐसा लगता है कि शेन संस्करण और एबीआई संगतता और अंतःक्रियाशीलता, और स्थिरता प्रीमियम पर हैं।

अद्यतन: मैंने आपको डेमो बनाया है यह here (plugin_r2.zip) है। यह डेल्फी एक्सई में किया गया था, लेकिन यदि आप डेल्फी के पुराने संस्करण का उपयोग कर रहे हैं, तो आप बस .dproj फ़ाइलों को हटा दें और मुख्य ऐप के लिए .dpr फ़ाइल खोलें, और पैकेज के लिए .dpk खोलें।

+0

मुझे बीपीएल के अंदर फॉर्म, डेटामैड्यूल और संसाधनों को स्टोर करने की ज़रूरत है। लक्ष्य मुख्य एपीपी के लिए अतिरिक्त मॉड्यूल बनाना है, जिसे मैं ग्राहक देता हूं या नहीं। हर बार जब मैं मुख्य बनाता हूं, तो मैं मॉड्यूल (बीपीएल) का पुनर्निर्माण करूंगा। DELPHI संस्करण एक समस्या नहीं है जो मैं 2007 में काम करता हूं और इसे कुछ समय तक विस्तारित करने की योजना बना रहा हूं। अब क्या काम नहीं कर रहा है GetClass है। – Jlouro

+0

मैंने आपको एक डेमो बनाया है, ऊपर दिए गए अंतिम लिंक को अंतिम लिंक देखें! यदि आप डेल्फी एक्सई का उपयोग नहीं कर रहे हैं, तो DPROJ फ़ाइल को हटाएं, और .dpr फ़ाइल खोलें, और इसे अभी भी काम करना चाहिए। –

+0

डेमो के लिए धन्यवाद, लेकिन "mainFormMainUnit1.pas" गायब है। – Jlouro

4

पैकेज एक आसान समाधान है लेकिन उनके पास एक बड़ी कमी है। पैकेजों का उपयोग प्लगइन लेखकों को न केवल डेल्फी का उपयोग करने के लिए मजबूर करता है, बल्कि संकलक का वही संस्करण जैसा आप करते हैं।

मैं व्यक्तिगत रूप से कई इंटरफेस के माध्यम से ऐप की कार्यक्षमता का पर्दाफाश करना पसंद करूंगा। यह डेल्फी के अलावा अन्य भाषाओं से पहुंच की अनुमति देता है।

आमतौर पर प्लगइन एक डीएलएल में लागू किया जाएगा और एक फ़ंक्शन निर्यात करेगा जो ऐप ऐप का प्रतिनिधित्व करने वाले रूट इंटरफ़ेस में पास करने के लिए कॉल करेगा। प्लगइन तब उस इंटरफ़ेस के तरीकों को कॉल करेगा जिससे दो-तरफा इंटरैक्शन स्थापित हो सके।

+1

यदि वह डेटामोड्यूल और डेल्फी रूपों को प्रश्न राज्यों के रूप में वापस करना चाहता है, तो यह सलाह उपयोगी नहीं है। चूंकि लौटाए गए फॉर्म डेल्फी और संस्करण निर्भर होंगे, वैसे भी –

+0

लेकिन लोगों को शार्क से पीड़ित पानी से दूर चेतावनी देना एक अच्छा विचार है। इस प्रकार, डेविड के लिए +1। –

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