2017-01-12 9 views
8

वीबी 6/वीबीए परियोजना संदर्भ में ऐरे(), एलबाउंड(), और यूबाउंड() से आते हैं ..? जब मैं कोड में टाइप कर रहा हूं, तो वे स्वत: पूर्ण सूची (ctrl + space) में प्रकट नहीं होते हैं, वे स्वतः पूर्ण नहीं होते हैं, और पाठ संपादक उन्हें पहचानने से पहले उन्हें पूरी तरह से टाइप किया जाना चाहिए। और केवल जब बाएं-कोष्ठक टाइप किया जाता है तो टूलटिपटेक्स्ट कमांड सिंटैक्स के साथ पॉप अप करेगा। साथ ही, वे ऑब्जेक्ट एक्सप्लोरर में कहीं भी दिखाई नहीं देते हैं।वीबी 6/वीबीए परियोजना संदर्भ में जहां ऐरे(), एलबाउंड(), और यूबाउंड() आते हैं ..?

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

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

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

+0

https://msdn.microsoft.com/en-us/library/sh9ywfdk.aspx –

+0

@ केनवाइट - यह वीबी.NET संदर्भ है। - उस भाषा में वीबी नेमस्पेस में 'ऐरे', 'एलबाउंड', और 'यूबाउंड' वास्तव में * हैं। – Comintern

+0

@ टिप्पणी: शायद आप मुझसे अलग प्रश्न पढ़ रहे हैं। ** क्या कोई सूची है ..? ** मेरे लिए बहुत स्पष्ट है। क्या स्नैंक के लिए कोई विशेष कारण है? –

उत्तर

6

कारण यह है कि वे इंटेलिसेन्स विकल्पों के रूप में नहीं दिखते हैं (और वे ऑब्जेक्ट ब्राउज़र में क्यों नहीं दिखते हैं) यह है कि उन्हें VBE7.dll टाइपेलिब में किसी कारण से घोषित नहीं किया गया है जो मेरे बाहर है। Array फ़ंक्शन को .dll में rtcArray के रूप में कार्यान्वित किया गया है। यह जानने की उपयोगिता कि संदिग्ध है, इसमें इसकी एकमात्र तर्क ParamArray है, जिसका अर्थ है कि यदि आप इसे सीधे VBE7.dll से कहते हैं तो आपको इसे एक ही सरणी वापस लाने के लिए एक सरणी बनाना होगा ... यह आंशिक रूप से बताता है कि यह टाइपेलिब पर क्यों नहीं है - एक COM कॉल को वही काम करने की आवश्यकता होगी, और मार्शल मूल रूप से वही काम कर रहा है जैसा कि आप कार्य को वापस करने की अपेक्षा करेंगे।

LBound और UBound निर्यात तालिका में फ़ंक्शंस के रूप में भी दिखाई नहीं देता है, इसलिए मेरा अनुमान है कि उन्हें आंतरिक रूप से प्रथम श्रेणी के कार्यों की तुलना में "कीवर्ड" की तरह अधिक संभाला जाता है। यह कुछ समझ में आता है, जबकि इसमें यदि आप इसे के अंत में rgsabound सरणी में स्वचालन struct करने के लिए एक सूचक (आप बस सूचकांक एक SAFEARRAY की सीमा की जाँच करें और cElements और lLbound यह से पढ़ने के लिए काफी तुच्छ है। फिर एक अनुमान है, लेकिन मुझे लगता है कि यह LBound और UBound फिक्स्ड लम्बाई और परिवर्तनीय लंबाई सरणी दोनों के साथ फ़ंक्शन करने में लचीलापन की अनुमति देता है। निश्चित स्थिति में, सरणी को मूल रूप से एक इंडेक्सर के साथ मेमोरी के ब्लॉक के रूप में प्रबंधित किया जाता है (जैसे एक VT_CARRAY एक VT_SAFEARRAY की तुलना में)। मैं कल्पना करता कि इस से निपटने के आंतरिक रूप से आसान या प्रथम श्रेणी के कार्यों प्रदान करने की तुलना में अधिक सुविधाजनक था।

+0

धन्यवाद, यह मेरे लिए इसे परेशान करता है। मैंने TLBINF32.DLL के साथ डब किया है, इसलिए मैं समझता हूं कि आप क्या कह रहे हैं। लेकिन दूसरे अनुच्छेद में, आप सी-भूमि में यात्रा करते हैं और मैं वहां खो जाता हूं। मैंने हाल ही में कॉलेज में जावा के चार सेमेस्टर ले लिए और एक दिलचस्प दुष्प्रभाव की खोज की जिसे मैं उम्मीद नहीं कर रहा था: अब मैं सी ++ कोड पढ़ सकता हूं और लगभग इसे समझ सकता हूं। – spinjector

+1

@spinjector - लेकअवे यह है कि एलबीएंड और यूबाउंड को 2 बहुत ही अलग प्रकार के सरणी से निपटना होगा - निश्चित वाले (जो एक सफेरे के साथ COM उपयोग के लिए लपेटा नहीं जाता है) और वेरिएबल वाले (जो safearray structs हैं)। तो एक चर के साथ, आप बस संरचना पढ़ा। एक निश्चित के लिए, आपको इसके बारे में विवरण जानना होगा कि आपने इसके लिए स्मृति, प्रकार इत्यादि को आवंटित किया है। आम तौर पर अनचाहे सरणी तत्व आकार और सरणी लंबाई का वर्णन करने वाले पैरामीटर के साथ पास की जाती हैं। इसका मतलब है कि एक ऐसे फ़ंक्शन का पर्दाफाश करने का वास्तव में एक सुरक्षित तरीका नहीं है जो उन्हें सार्वजनिक इंटरफ़ेस पर संभाल सके। – Comintern

+0

अजीब, शीर्ष से ऊपर ऐसा लगता है कि गतिशील सरणी अधिक कठिन होने के साथ, यह दूसरी तरफ होगा। – spinjector

2

आप won't ऑब्जेक्ट ब्राउज़र में Debug या तो इसके तरीके Assert और Print खोजें।

आप वक्तव्य कि, तरीकों की तरह इस्तेमाल कर रहे हैं Open, Close, Get और Put की तरह नहीं मिलेगा, जिसके कारण आप किसी भी Intellisense जब आप उन बयानों का उपयोग नहीं मिलता है, और वाक्य रचना याद किया जाना चाहिए।

आप Load और UnloadVBA.Global के सदस्यों के रूप मिलेगा, लेकिन यह स्पष्ट नहीं है कि वे क्या करने के लिए नहीं तो हैं, और उनके तर्कों देर बाध्य Objects हैं। वीबीए दस्तावेज में कहा गया है कि Load और Unloadविवरण हैं, भले ही ऑब्जेक्ट ब्राउज़र उन्हें विधियों के रूप में दिखाता है।

-1

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

+4

"यह इसे चुराता है" - सही शब्द "छुपा" है, जैसा कि "सदस्य छिपाने" में है। वीबीए मानक पुस्तकालय [** स्थानांतरित नहीं किया जा सकता **] (https://i.stack.imgur.com/8lsf4.png) हालांकि - यह शीर्ष प्राथमिकता होने के लिए कठिन है। मेजबान एप्लिकेशन के ऑब्जेक्ट मॉडल लाइब्रेरी के साथ ही ... –

+1

शायद वीबीई में पहले अपने सुझावों को आजमाएं? 'यूबाउंड',' एलबाउंड' और 'ऐरे' सभी आरक्षित शब्द हैं, इसलिए आप उन नामों के साथ प्रक्रियाएं नहीं बना सकते हैं। यह स्पष्ट नहीं है कि क्या होगा यदि आपके पास संदर्भित टीएलबी में उन नामों के साथ पहचानकर्ता हों, लेकिन किसी भी मामले में, वीबीए प्रोजेक्ट ** ** ** ** ** ** ** ** ** ** के संदर्भ में स्थिति 1 पर ** तय किया गया है। संदर्भों को आगे बढ़ाने के बारे में त्रुटिपूर्ण है। – ThunderFrame

+0

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

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