2017-11-16 65 views
5

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

Dim objIEShell As Object = CreateObject("Shell.Application") 
Dim objIEShellWindows As Object = objIEShell.Windows 
Dim objIEWin As Object 
For Each objIEWin In objIEShellWindows 
    If InStr(objIEWin.LocationURL,"google")>0 Then 
     objIEWin.Quit 
     objIEWin = Nothing 
    End If 
Next 

कोड बस "गूगल" URL में इंटरनेट एक्सप्लोरर के सभी उदाहरणों बंद कर देता है: यहाँ कोड आह्वान कोड चरण में का उपयोग कर im है। यह मैं जब यह संकलन करने की कोशिश कर पाने त्रुटि संदेश है:

Message: Error compiling code 
error BC30574: Option Strict On disallows late binding. At line 2 
error BC32023: Expression is of type 'Object', which is not a collection type. At line 4 

अनुसंधान मैं अब तक क्या किया है मुझे पता है लाइन 2 पर पहली त्रुटि संदेश objIEShell और Windows के बीच प्रकार अंतर के साथ क्या करना है से तरीका। मुझे लगता है कि मुझे objIEShell इस तरह, CType(objIEShell,?) को परिवर्तित करना है, लेकिन मुझे नहीं लगता कि। विन्डोज़ विधि या इसे कैसे ढूंढें। दूसरी त्रुटि को ठीक करने के तरीके के बारे में भी कोई अंतर्दृष्टि की सराहना की जाएगी क्योंकि मुझे यकीन नहीं है कि उस के साथ कहां से शुरुआत करें।

+0

आप प्रति मॉड्यूल विकल्प सख्त बंद कर सकते हैं, कोड फ़ाइल – SSS

+1

के शीर्ष पर केवल 'विकल्प सख्त बंद' टाइप करें, मैं जिस प्रोग्राम का उपयोग कर रहा हूं, वह इसके लिए अनुमति नहीं देता है। मैं जानना चाहता हूं कि इस सेटिंग को बदले बिना समस्या को कैसे ठीक किया जाए। धन्यवाद – unknownpresense

उत्तर

10

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

आपको पहले उन घटकों में दो संदर्भ जोड़ने की आवश्यकता है ताकि संकलक नामों को समझ सके। प्रोजेक्ट> संदर्भ जोड़ें> COM टैब का उपयोग करें और "माइक्रोसॉफ्ट इंटरनेट कंट्रोल" और "माइक्रोसॉफ्ट शैल कंट्रोल एंड ऑटोमेशन" पर निशान लगाएं। वह शेल 32 और एसएचडीओसीवी नामस्थान जोड़ता है।

अब आप कोड इस तरह जल्दी ही सीमित लिख सकते हैं:

Dim objIEShell = New Shell32.Shell 
    Dim objIEShellWindows = CType(objIEShell.Windows, SHDocVw.IShellWindows) 
    Dim objIEWin As SHDocVw.WebBrowser 
    For Each objIEWin In objIEShellWindows 
     If InStr(objIEWin.LocationURL, "google") > 0 Then 
      objIEWin.Quit() 
     End If 
    Next 

CTYPE() अभिव्यक्ति शायद सबसे unintuitive से एक है, Shell.Windows संपत्ति उन के बीच निर्भरता को तोड़ने के लिए प्रकार वस्तु का है दो घटक कंपाइलर को खुश रखने के लिए कलाकार आवश्यक वूडू है।