我有一個接口 - 其中一個成員返回一個變量類型對象。Visual Studio:如何找出這種類型的定義?
在我試圖嘗試使用這個返回的變量,我發現它不只是一個「對象」,但實際上是「mshtml.HTMLDocumentClass」,你可以在下面的截圖中看到:
alt text http://i43.tinypic.com/svmfbn.jpg
對我來說,這是完美的,因爲它出現(通過代碼洞察),該對象然後支持很多的方法和屬性實際上,我嘗試使用(我是即將通過後期綁定使用)。
的問題是:
- 哪裏是這種類型是從哪裏來的?
- 它在哪裏定義
所以我可能我的代碼轉換來源:
object webDocument = ie.Document;
到
mshtml.HTMLDocumentClass webDocument = (mshtml.HTMLDocumentClass)ie.Document;
如果你想知道,即聲明如:
IWebBrowser2 ie;
和ie.Document的IWebBrowser2的的聲明是:
[ComImport, DefaultMember("Name"),
Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
SuppressUnmanagedCodeSecurity]
public interface IWebBrowser2
{
...
object Document { [return: MarshalAs(UnmanagedType.IDispatch)] [DispId(0xcb)] get; }
...
}
所以這是一個對象,也支持IDispatch接口。我的任何代碼中都沒有提到稱爲「mshtml.HTMLDocumentClass」的類型。
注:如果你認爲它可以轉換爲
System.Windows.Forms.HtmlDocument
你就錯了。
如果您想知道爲什麼要這樣做,那麼將所有變量名稱和類類型更改爲隨機字符串以混淆示例。
chakrit使用「*轉到定義建議ie.Document成員,這不幸的是去的也就是聲明的**。文件:
alt text http://i41.tinypic.com/96dwmd.jpg
而且還對象的聲明使我對象聲明:
alt text http://i41.tinypic.com/28qta9z.jpg
chakrit有一個非常好的建議:
public static string TellMeAboutThisObject(object obj)
{
Type t = obj.GetType();
Assembly asm = t.Assembly;
return
"Type Name: "+t.FullName+Environment.NewLine+
"Namspace: " + t.Namespace+Environment.NewLine+
"From assembly: "+ asm.FullName+Environment.NewLine+
"Located at: "+asm.Location;
}
這在我的情況下返回:
類型名稱: mshtml.HTMLDocumentClass
Namspace: MSHTML
在彙編: Microsoft.mshtml,版本= 7.0。 3300.0,文化=中立,PublicKeyToken = b03f5f7f11d50a3a
坐落在: C:\ WINDOWS \裝配\ GAC \ Microsoft.mshtml \ 7.0.3300.0__b03f5f7f11d50a3a \ Microsoft.mshtml.dll
所以,在我的情況下,它的damnest的事情,有人是自動添加引用託管程序集 - 當我試圖直接與COM進行交互時。
我該怎麼定義。目的? ie.Document?這些使我能夠分別聲明Object和IWebDocument2.Document - 而不是{mshtml.HTMLDocumentClass}的聲明。 – 2009-01-27 19:29:46