2012-12-22 19 views
5

में नामस्थान मेरे पास दो बीपीएल पैकेज हैं: कोर और बिजनेस, एक एप्लिकेशन द्वारा उपयोग किया जाता है। Core.bpl में TUser क्लास के साथ यूनिट User.pas शामिल है। Core.bpl में टीयूसर में केवल दो आधार फ़ील्ड हैं: लॉगिन और पासवर्ड। मैं बिजनेस पैकेज में नए क्षेत्र के साथ टीयूसर क्लास का विस्तार करना चाहता हूं: UserName। और मैं बिजनेस यूनिट को मूल इकाई के रूप में नामित करना चाहता हूं: User.pas।डेल्फी XE2

तो, मैं Business.bpl में एक नई इकाई User.pas बनाता हूं और वहाँ TUser क्लास रखता हूं जो Core.bpl से TUser को बढ़ाता है। अब मुझे TUser को Core.bpl और TUser से Business.bpl से विभाजित करने की आवश्यकता है। और मुझे यहां "नामस्थानों की शक्ति" का उपयोग करने की आवश्यकता है :)

मैंने Embarcadero doc page पढ़ा है। वे कहते हैं कि कोई नामकरण के साथ पैकेज के लिए डिफ़ॉल्ट नेमस्पेस सेट कर सकता है, उदा। Base.Core। मैंने अपने पैकेज को Base.Core.bpl और Extra.Business.bpl के रूप में नामित किया। और संकलित फाइलों का नाम दिया गया है। लेकिन उनमें से सभी इकाइयां अभी भी नामित हैं जैसे कि वे पहले थे: User.pas -> User.dcu।

अब मुझे मॉड्यूल में दो क्लास टीयूसर मिला है User.pas: पैकेज में एक बेस Base.Core.bpl, पैकेज में अन्य Extra.Business.bpl।

unit User; 
interface 
uses 
    Base.User; 
type 
    TUser = class(Base.User.TUser) 
    end; 

की तरह अतिरिक्त दिखता में User.pas लेकिन जब मैंने उसे संकलित करने के लिए चाहते हैं, मैं एक खिड़की मिल गया है: "। उपयोगकर्ता को निकालें यूनिट (रों) उपयोगकर्ता आवश्यक पैकेज बेस में पाए गए।"

बेस.यूसर से नए टीयूसर को प्राप्त करने के लिए मैंने क्या किया है। उदाहरण के लिए जावा में ऐसा हो सकता है, उदाहरण के लिए?

पीएस बस मामले में, मैं डेल्फी XE2 आईडीई का उपयोग करता हूं।

+0

यदि आप इस तरह के नोटेशन का उपयोग करना चाहते हैं, तो आप उन्हें 'यूनिट बेस.उसर' और 'यूनिट बिजनेस.यूसर' के रूप में नामित नहीं करना चाहिए? –

+0

कोर और व्यवसाय में कई इकाइयां हैं ... और वे सभी एसवीएन में हैं :(उन सभी का नाम बदलना आखिरी तरीका है ... हो सकता है, कोई इसे आसान कर सकता है? – omickron

+1

मैं आपके साथ हूं। प्रलेखन एक बात कहता है। लेकिन कार्यक्रम पूरी तरह से अलग व्यवहार करता है। –

उत्तर

6

डिफ़ॉल्ट नामस्थान पोर्टल केक प्रतीत होता है - यह एक झूठ है। आपके द्वारा लिंक किया गया दस्तावेज़ प्रोग्राम से मेल नहीं खाता है।

मैं इस कार्यक्रम बनाया:

MyCompany.Programs.MyProgram.dpr

program MyCompany.Programs.MyProgram; 

uses 
    MyUnit in 'MyUnit.pas'; 

begin 
end. 

MyUnit.pas

unit MyUnit; 

interface 

implementation 

end. 

और जिसके परिणामस्वरूप .dcu फ़ाइल MyUnit.dcu नाम है । आपके द्वारा लिंक किए गए दस्तावेज़ों के अनुसार MyCompany.Programs.MyUnit.dcu नाम दिया जाना चाहिए।

मेरा मानना ​​है कि आपको इकाई नाम में स्पष्ट रूप से नामस्थान निर्दिष्ट करना होगा।

+0

"आपको इकाई नाम में स्पष्ट रूप से नामस्थान निर्दिष्ट करना होगा" यह एक दयालु है ... – omickron

+0

मेरे जीवन के लिए मैं समझ नहीं पा रहा हूं कि प्रोग्राम दस्तावेज़ीकरण से मेल नहीं खाता है। दस्तावेज बहुत स्पष्ट है। यह देखना मुश्किल है कि हम इसे कैसे गलत समझ सकते हैं। –

+0

क्या यह XE3 में भी होता है, क्या आप नहीं जानते? – omickron