2009-08-01 6 views
18

TFrame-descendent components के सेट के लिए अपने पैकेज को पुनर्व्यवस्थित करने का प्रयास कर रहा है, मुझे लगता है कि मेरे कुछ उपयोगिता टीएफआरएम वंशजों का उपयोग उन संवाद रूपों से अलग है जो मुख्य रूप से पैलेट में पंजीकृत हैं, और ऐसा लगता है कि कभी-कभी उन मॉड्यूल फॉर्मों के संबंध में आईडीई को भ्रमित करना पड़ता है जो उनका उपयोग करते हैं। बदले में संवाद रूपों को गैर-दृश्य घटकों द्वारा बुलाया जाता है, जो कि तीसरे पैकेज का हिस्सा हैं। यह, अब तक, लगता है कि अधिकांश कंपाइलर dependency-related complaints/भ्रम दूर हो जाते हैं। (हालांकि, मैं अभी तक बाहर नहीं हूं)।डेल्फी पैकेज में हमेशा "बुरी तरह से आयात" किया जाता है?

जब संवाद रूपों साथ पैकेज (जो फ्रेम्स कहते हैं) संकलन, मैं चेतावनी हो रही है "यूनिट 'MyFrames' परोक्ष पैकेज में आयात 'MyDialogForms'"

को देखते हुए यह पता चलता है कि एक कंपाइलर चेतावनी के रूप में, मुझे बहुत पहले यह धारणा मिली है कि एक इकाई "निहित रूप से आयात" आम तौर पर एक अच्छी बात नहीं है। क्या ऐसे विशिष्ट उदाहरण हैं जहां यह मामला नहीं है? यानी जहां एक इकाई को स्पष्ट रूप से आयात करना ठीक है, और/या एक उचित अभ्यास है? ... और यदि हां, तो वे विशिष्ट मामले क्या हैं?

उत्तर

28

यहाँ मुद्दा है:

आप केवल अपने कार्यक्रम में एक इकाई की एक प्रति हो सकता है। यदि आप संकुल के माध्यम से दो बार एक ही इकाई को लोड करने का प्रयास करते हैं, तो यह एक अपवाद उठाएगा और पैकेज दूसरी बार लोड नहीं होगा। इससे बचने का तरीका अपने पैकेजों को ढांचा बनाना है ताकि उनमें से एक से अधिक में कोई इकाई उपयोग न हो।

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

किसी कारण के लिए यह एक चेतावनी है, और कोई त्रुटि नहीं है। जब तक आप समझते हैं कि सिस्टम कैसे काम करता है, यह तकनीकी आयात को अंतर्निहित आयात का उपयोग करने के लिए सुरक्षित है। बस याद रखें कि उन इकाइयों को पैकेज में समाप्त हो रहा है चाहे आप उन्हें घोषित करते हैं या नहीं। लेकिन फिर से, क्योंकि वे वहां समाप्त हो रहे हैं कि आप उन्हें घोषित करते हैं या नहीं, आधिकारिक तौर पर उन्हें जोड़ने और खुद को परेशानी बचाने के लिए शायद यह आसान है।

+2

(ध्यान दें कि पैकेज में बीपीएल में इसका मतलब नहीं है। $ Weakpackageunit देखें;) –

+1

मेसन - धन्यवाद! यह सबसे संक्रामक, संक्षिप्त अवधारणात्मक अवलोकन है जिसे मैंने इस पर पढ़ा है क्योंकि मेरे पैकेज सागा शुरू हुए थे। – Jamo

+0

डेल्फी पैकेजों में SysUtils, Forms, आदि जैसे मौलिक इकाइयों के पुनरावर्ती संदर्भों को कैसे संभालता है? ऐसा लगता है जैसे ये एक ही तरह की समस्या का कारण बनेंगे। – Jamo

10

Mason's answer के लिए +1। वह स्थान जहां निहित रूप से आयातित इकाइयां एक समस्या बन जाती हैं, एक बड़ी परियोजना पर है जहां यह घुड़सवार से जुड़े इकाइयों का ट्रैक रखने के लिए तेजी से अधिक कठिन हो जाता है।

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

संरचना वास्तव में बनाए रखने में बहुत मुश्किल नहीं है और यह आपको उन समस्याओं से बचाती है जहां विभिन्न इकाइयों में फ़ाइल के विभिन्न संस्करण होते हैं।

+0

यह एक ठोस सिफारिश की तरह लगता है - मैं इसे आजमा सकता हूं! उत्तर के लिए धन्यवाद, कोबस। बहुत सराहना की। – Jamo

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