2011-08-25 14 views
6

में एक वर्ग के उदाहरण का पर्दाफाश करने के लिए सबसे अच्छा मैं उत्कृष्ट Pascal DWScript का उपयोग कर एक साथ डाल रहा हूँ एक अंतर्निहित स्क्रिप्ट क्षमता। मैं भी का उपयोग कर DWScript को अपने ही डेल्फी साइड वर्ग परिभाषा (TDemo) जोड़ने हैकैसे DWScript

dwsUnit.ExposeRTTI(TDemo.ClassInfo ) 

यह सिर्फ काम करता है और जल्दी से गुण और विधियों को जोड़ने का एक शानदार तरीका है।

मैं भी एक समान तरीके से एक मौजूदा उदाहरण जोड़ना चाहते हैं, तो मैं प्रकार TDemo की मेरी उदाहरण FDemo बनाया है और उसके बाद प्रदर्शन किया:

dwsUnit.ExposeInstanceToUnit('Demo', 'TDemo', FDemo); 

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

+0

हो सकता है कि 'कि यूनिट के initialization' अनुभाग के लिए कुछ कोड जोड़ सकता हूँ? – Johan

उत्तर

4

ExposeInstanceToUnit को TdwsUnit तालिका प्रारंभिकरण के भीतर से उपयोग करना होगा, कुछ नमूना कोड के लिए RTTIExposeTests/ExposeInstancesAfterInitTable देखें। यह सीधे गतिशील उदाहरणों को उजागर करने की अनुमति देता है।

अन्य दृष्टिकोण उदाहरण एक TdwsUnit घटक संग्रह का उपयोग करना है, आपको डिज़ाइन-टाइम समर्थन मिलता है, और आपके उदाहरणों और उनके जीवनकाल पर अधिक नियंत्रण मिलता है।

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

संपादित करें: एक पिछले दृष्टिकोण हाल ही में जोड़ा TdwsRttiConnector, जो मूल रूप से उजागर और कुछ भी है कि RTTI माध्यम से पहुंच योग्य है के लिए कनेक्शन की अनुमति देता है का उपयोग करें। सेटअप के लिए कोड के मामले में यह बहुत हल्का है, लेकिन नकारात्मकता यह है कि आपको संकलन-समय की जांच का कोई भी रूप नहीं मिलता है।

+0

धन्यवाद एरिक, यह बहुत उपयोगी है। –

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

  • कोई संबंधित समस्या नहीं^_^