मेरे पास एक इंटरफ़ेस है - जिसका सदस्य एक ऑब्जेक्ट प्रकार के एक चर देता है।
इस लौटे हुए चर का उपयोग करने की कोशिश करने के अपने प्रयासों में, मैंने पाया कि यह सिर्फ एक " ऑब्जेक्ट " नहीं है, बल्कि वास्तव में एक " mshtml.HTMLDocumentClass ", जैसा कि आप निम्नलिखित स्क्रीनशॉट में देख सकते हैं:
मेरे मामले में, यह सही है, क्योंकि यह (कोड-अंतर्दृष्टि के माध्यम से) प्रकट होता है, जिससे ऑब्जेक्ट बहुत से समर्थन करता है विधियों और गुणों का उपयोग करने के लिए मैं वास्तव में कोशिश कर रहा हूं (जो कि मैं देर से बंधन के माध्यम से उपयोग करने वाला था)।
प्रश्न यह है:
- यह प्रकार कहां से आ रहा है?
- यह परिभाषित कहां है
इसलिए मैं अपना कोड इन्हें बदल सकता हूं:
वस्तु webDocument = ie.Document;
से
<पूर्व> mshtml.HTMLDocumentClass webDocument = (mshtml.HTMLDocumentClass) ie.Document;
यदि आप सोच रहे हैं, यानी को इस रूप में घोषित किया गया है:
IWebBrowser2 अर्थात्;
और ie.Document की IWebBrowser2 की घोषणा है:
<कोड> [ComImport, DefaultMember ( "नाम"), Guid ( "D30C1661-CDAF-11D0-8A3E -00C04FC9E26E "), InterfaceType (ComInterfaceType.InterfaceIsIDispatch), SuppressUnmanagedCodeSecurity] सार्वजनिक इंटरफ़ेस IWebBrowser2 {... वस्तु दस्तावेज़ {[वापसी: MarshalAs (UnmanagedType.IDispatch)] [DispId (0xcb)] प्राप्त होता है; } ...}
तो यह एक ऑब्जेक्ट है, जो IDispatch का भी समर्थन करता है कहीं भी मेरे किसी भी कोड में "mshtml.HTMLDocumentClass" नामक एक प्रकार का उल्लेख नहीं किया गया है।
ध्यान दें: अगर आपको लगता है कि उसे डाली जा सकती है
System.Windows.Forms.HtmlDocument
आपको गलत होगा।
यदि आप सोच रहे हैं कि मैं ऐसा क्यों कर रहा हूं, तो सभी चर नाम और यादृच्छिक स्ट्रिंग में वर्ग प्रकार के उदाहरण अंधेरा करना।
का उपयोग कर "* परिभाषा पर जाएं ** सुझाव दिया ie.Document सदस्य है, जो दुर्भाग्य को जाता है की यानी। दस्तावेज़ की घोषणा:
और ऑब्जेक्ट की घोषणा भी मुझे ऑब्जेक्ट की घोषणा के लिए लाती है:
एक बहुत अच्छा सुझाव था:
सार्वजनिक स्थैतिक स्ट्रिंग TellMeAboutThisObject (वस्तु obj) {प्रकार टी = obj.GetType (); विधानसभा Asm = t.Assembly; वापसी "प्रकार नाम:" + t.FullName + Environment.NewLine + "Namspace:" + t.Namespace + Environment.NewLine + "असेंबली से:" + a Sm.FullName + Environment.NewLine + "यहां स्थित:" + asm.Location; }
मेरे मामले में कौन से रिटर्न देता है:
प्रकार नाम: mshtml.HTMLDocumentClass
Namspace: mshtml
विधानसभा से: Microsoft.mshtml, संस्करण = 7.0.3300.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a
< strong> पर स्थित है: C: \ Windows \ विधानसभा \ GAC \ Microsoft.mshtml \ 7.0.3300.0__b03f5f7f11d50a3a \ Microsoft.mshtml.dll
तो, मेरे मामले में यह है सबसे खराब बात यह है कि कोई स्वत: एक प्रबंधित असेंबली के संदर्भ में स्वचालित रूप से जोड़ रहा है - जब मैं सीधे COM के साथ इंटरॉप करने की कोशिश कर रहा था।
आप किसी विशेष ऑब्जेक्ट के बारे में जानकारी प्राप्त करने के लिए विधि का उपयोग कर सकते हैं।
यहाँ एक उदाहरण है:
सिस्टम का उपयोग कर; स्थैतिक वर्ग कार्यक्रम {स्थिर शून्य मुख्य () {var obj = new {Random = "Object"} वस्तु के रूप में; Var t = obj.GetType (); Var asm = t.Assembly; कंसोल.प्रकाशलाइन ("प्रकार का नाम:" + t.FullName); कंसोल.प्रकाश लाइन ("नंब्सपेस:" + T.Namespace); कंसोल.प्रकाशलाइन ("विधानसभा से:" + asm.FullName); कंसोल.प्रकाशलाइन ("यहां स्थित:" + asm.Location); Console.ReadKey (); }}
या आपके मामले में ...
var t = ie.Document.GetType ()
... आपको उस प्रकार की जानकारी देना चाहिए जो वास्तव में अंदर है ie.Document
।
Comments
Post a Comment