2012-03-24 13 views
10

मैं अपने द्वारा बनाए गए कस्टम घटक के लिए एक पैकेज बनाने की कोशिश कर रहा हूं। यह ग्राफिक्स 32, ग्राफिकएक्स और सीसीआर.एक्सिफ़ सहित कई पुस्तकालयों पर आधारित है।कस्टम घटक निर्भरता नरक

मैं एक पैकेज प्रोजेक्ट बनाया है, इसकी रजिस्टर प्रक्रिया सहित इकाई ने लिखा है, कुछ अतिरिक्त संदर्भ डेल्फी के बारे में मुझे सूचित किया जोड़ा धारा (dbrtl.dcp, inet.dcp, soaprtl.dcp, vclimg भी आवश्यक है। dcp, xmlrtl.dcp और dclGraphicEx140.dcp) और में कई इकाइयां शामिल हैं, जो अनुभाग शामिल हैं ताकि यह स्पष्ट रूप से होने वाली चेतावनियों से बच सके। प्रोजेक्ट संकलित करता है और बिना किसी समस्या के अपनी मशीन पर स्थापित और इस्तेमाल किया जा सकता है। हालांकि, जब मैं इसे किसी अन्य मशीन पर स्थापित करना चाहता हूं, तो समस्याएं शुरू होती हैं। अंत में, मुझे अपने सभी तृतीय पक्ष घटकों से उपयोग किए गए सभी डीसीयू के बारे में प्रतिलिपि बनाना था, साथ ही ग्राफिकएक्स से डीसीपी और बीपीएल दोनों, जिन्हें मुझे भी इंस्टॉल करना था।

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

वैसे भी, मैं अपना वितरण न्यूनतम तक कैसे रखूं और ऐसी स्थितियों से बचें? मैं चाहता हूं कि मेरी टीम के अन्य डेवलपर्स को पैकेज का उपयोग करने में सक्षम होने के बारे में चिंता न किए बिना मैं इसे बनाने के लिए उपयोग करता हूं। शुरुआत के लिए, क्या सभी तृतीय पक्ष इकाइयों को अपने डीसीयू में संकलित नहीं किया जा सकता है?

+7

घटक स्थापना डेल्फी की शर्म की बात है, अब एम्बरकेडरो द्वारा लगातार अनदेखा किया जाता है। – kludg

+0

आईडीई में उपयोग करने के लिए संकलित अनुप्रयोगों या अन्य डेवलपर्स के उपयोगकर्ताओं के लिए आप किस तरह का वितरण कर रहे हैं? उपयोग करने के लिए अन्य डेवलपर्स (टीम के सदस्यों) के नियंत्रण के साथ – afrazier

+0

@afrazier संकुल। –

उत्तर

0

सारांश

थोड़ी देर के लिए डेल्फी का उपयोग नहीं है, लेकिन, अपने कस्टम दृश्य नियंत्रण (पिछले संस्करण मैं काम डेल्फी 6 था) का विकास किया है।

संकुल निर्भरताओं से निपटने के दौरान 2 समस्याएं हैं। एक डेल्फी पर्यावरण में स्थापित है, जिससे घटक पैलेट पर नियंत्रण दिखाई देता है, साथ ही, घटक संपादक & संपत्ति संपादक।

और दूसरा ग्राहक मशीनों में संकलित संकुल वितरित करते समय।

यह भी निर्भर करता है कि डेल्फी पर आप किस संस्करण पर चल रहे हैं।

डिजाइन समय

जब एक कस्टम पैकेज के विकास, वहाँ पैकेज विकल्प के लिए एक टैब, उस गंतव्य फ़ोल्डरों इंगित करता है।

मैनुअल आमतौर पर डेवलपर्स को उन टेक्स्टबॉक्स को खाली छोड़ने के लिए कहते हैं। कभी-कभी काम करता है, कभी-कभी नहीं करता है। मैं संबंधित टेक्स्टबॉक्स में प्रत्येक फ़ोल्डर पथ लिखता हूं।

".dcp" फ़ाइलों के लिए एक टेक्स्टबॉक्स पथ है, अन्य " .dcu" के लिए अन्य, और इसी तरह।

यदि आपके पास दृश्य नियंत्रण और सामग्री संपादक या घटक संपादक जैसे सामान हैं, तो 2 पैकेजों में कोड को विभाजित करना बेहतर है ("रनटाइम" & "डिज़ाइनटाइम")।

मैं आमतौर पर डेल्फी स्थापना फ़ोल्डर के बाहर डेल्फी (पैकेज) परियोजनाओं को डालता हूं।

भागो समय

आमतौर पर, त्वरित तरीका DLL "विंडोज़ फ़ोल्डर" विंडोज (32)/सिस्टम फ़ोल्डर, या इसी तरह में फाइल "" * .bpl "" .dcp डाल करने के लिए है।


संकुल फ़ोल्डर संरचना स्रोत कोड सुझाव

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

[-]--+--c: 
.....| 
.....+--[-]--+--software 
.............| 
.............+--[+]-----java 
.............| 
.............+--[+]-----php 
.............| 
.............+--[-]--+--delphi (not the delphi folder in program files) 
.....................| 
.....................+--[+]-----apps (source code for delphi programs) 
.....................| 
.....................+--[+]-----other 
.....................| 
.....................+--[-]--+--packages (all delphi packages source code here) 
.............................| 
.............................+--[+]-----lib (a single package for non visual controls, libraries) 
.............................| 
.............................+--[+]-----tools (package pair for non visual tcomponent descendants) 
.............................| 
.............................+--[+]-----json (example) 
.............................| 
.............................+--[+]-----xml (example) 
.............................| 
.............................+--[-]--+--mycontrols (folder custom visual controls) 
.............................|.......| 
.............................|.......+--[-]--+--delphi40 (folder for delphi40 version of "mycontrols") 
.............................|.......|.......| 
.............................|.......|.......+----------dsgvclctrls40.dpk (design-time package "mycontrols") 
.............................|.......|.......| 
.............................|.......|.......+----------runvclctrls40.dpk (run-time package "mycontrols") 
.............................|.......|.......| 
.............................|.......|.......+--[+]--+--demos (individual example for each "mycontrol") 
.............................|.......|.......| 
.............................|.......|.......+--[+]--+--design ("*.pas" component editors destination folder) 
.............................|.......|.......| 
.............................|.......|.......+--[+]--+--sources ("*.pas" source code destination folder) 
.............................|.......|.......| 
.............................|.......|.......+--[+]--+--bin ("*.dcu" destination folder) 
.............................|.......|........ 
.............................|.......+--[+]--+--delphi50 (folder for delphi50 version of "mycontrols") 
.............................|.......|........ 
.............................|.......+--[+]--+--delphi60 (folder for delphi60 version of "mycontrols") 
.............................|.......|........ 
.............................|.......+--[+]--+--delphi70 (folder for delphi70 version of "mycontrols") 
.............................|................ 
.............................+--[-]-----etc... 

चीयर्स।

+3

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

+0

"डिज़ाइन टाइम" आपके लक्ष्य के पिछले चरण की तरह है। "रनटाइम" वितरण के लिए अधिक निर्देशित है। – umlcat

0

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

+0

डीएलएल के बजाय, क्या मैं वस्तुओं का उपयोग करने में सक्षम होने के लिए बीपीएल का उपयोग कर सकता हूं? और क्या बीपीएल को एक्सई में संकलित करना संभव नहीं है? –

2

जो आपने अनुभव किया है वह घटकों को लिखने वालों के लिए एक सामान्य बात है। वितरण हमेशा ऐसा ही होता है। पैकेज में अन्य पैकेज नहीं होते हैं, उन्होंने उन्हें संदर्भित किया। यह उनकी प्रकृति में है।

ऐसी स्थिति को दूर करने के लिए मैं हमेशा अपने घटकों का इलाज उसी तरह करता हूं जैसे मैं बेचने के लिए एक उत्पाद था: मैं एक सेटअप विज़ार्ड बनाता हूं जो पैकेज की सभी चीज़ों को वितरित और पंजीकृत करता है।

मेरे मामले में इनोसेटअप बहुत अच्छी तरह से काम करता है (http://www.jrsoftware.org/isinfo.php)।

+0

आप कैसे जांचते हैं कि कोई पैकेज पहले से इंस्टॉल नहीं है (क्योंकि आप इसे दो बार नहीं प्राप्त कर सकते हैं)? एक निश्चित स्थान नहीं है जहां इसकी अपेक्षा की जा सकती है। –

+0

@ तिजवानवनडिएन: आईडीई के साथ पंजीकृत सभी पैकेज विंडोज रजिस्ट्री में 'HKEY_CURRENT_USER \ Software \ Embarcadero \ BDS \ 7.0 \ ज्ञात पैकेज' के अंतर्गत सूचीबद्ध हैं। बीडीएस संस्करण डेल्फी संस्करण पर निर्भर करता है। अगर मुझे गलत नहीं लगता है, तो 7.0 का मतलब डेल्फी 2010 है। आईडीई में एक निश्चित पैकेज पहले से मौजूद है या नहीं, यह निर्धारित करने के लिए उस कुंजी के नीचे आइटम देखें। – AlexSC

0

मुझे लगता है कि एलेक्सएससी का सबसे अच्छा जवाब है, लेकिन मुझे लगता है कि अगर आपके पास एक कस्टम घटक होना चाहिए जिसमें कोई निर्भरता नहीं है तो एक विकल्प हो सकता है।

मैं अपने डेवलपर्स के लिए एक घर के घटक बनाने की कोशिश कर थोड़ी देर पहले डेल्फी निर्भरता निराशा में भाग गया। मेरे सुझाव:

  1. स्थापना रद्द करें सभी निर्भरता अपने घटक

  2. अपने घटक पैकेज में उपयोग करता है, इसके बाद के संस्करण डीसीपी को दूर अपने पैकेज से अनुभाग की आवश्यकता से।

  3. कॉपी अपने घटकों के लिए अपने निर्भरता के स्रोत फ़ाइलों

जब आप घटक वितरित करना, आप आवश्यक dependecies के कोड के साथ distibute को

आप चलाएंगे होगा यदि आप निर्भरताओं का अलग-अलग उपयोग करना चाहते हैं तो मुद्दों में यदि डेल्फी आपको स्थापित पैकेजों में डुप्लिकेट यूनिट नाम रखने की अनुमति नहीं देगी।

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

फिर, एलेक्सएससी का सबसे अच्छा जवाब है और InnoStudio एक बहुत छोटा टूल है।

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