2009-01-27 47 views
2

我有一個接口 - 其中一個成員返回一個變量類型對象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進行交互時。

回答

1

可以使用Object.GetType()方法獲取有關你有特定對象的信息。

下面是一個例子:

using System; 

static class Program 
{ 
    static void Main() 
    { 
     var obj = new { Random = "Object" } as object; 

     var t = obj.GetType(); 

     var asm = t.Assembly; 

     Console.WriteLine("Type name  : " + t.FullName); 
     Console.WriteLine("Namspace  : " + t.Namespace); 
     Console.WriteLine("From assembly : " + asm.FullName); 
     Console.WriteLine("Located at : " + asm.Location); 

     Console.ReadKey(); 
    } 
} 

或者在你的情況......

var t = ie.Document.GetType() 

...應該給你輸入的是什麼呢這是真的裏面ie.Document信息。

1

對你試圖完成什麼感到困惑。

你能不能使用「轉到定義」上下文菜單在Visual Studio中彈出對象瀏覽器定位類型?

go to definition http://chakrit.net/files/temp/so_go_to_definition.png

+0

我該怎麼定義。目的? ie.Document?這些使我能夠分別聲明Object和IWebDocument2.Document - 而不是{mshtml.HTMLDocumentClass}的聲明。 – 2009-01-27 19:29:46

2

在MSDN上快速搜索讓我到這個網頁,其中介紹瞭如何獲取文檔接口: About MSHTML
注:我不能嘗試任何這是我堅持VS.80

+0

好吧,它實際上是Ubiquity - google命令,但第一個結果是MSDN頁面。 – dragonjujo 2009-01-27 19:47:26

+0

問題在於它不適用於.NET。沒有可以查詢IHTMLDocument2的IDispatch接口類型。 – 2009-01-27 19:55:08

1

只需添加一個參考Microsoft.mshtml。 「Nuff說。

加:好的,再多說幾句 - 。NET程序通過這些互操作程序集與COM對象一起操作。如果您在Visual Studio中添加對COM對象的引用,VS會爲您生成一個。對於WebBrowser,已經有一個預生成的,因爲它經常被使用。但是你不能直接使用COM進行操作。那麼,也許你可以,但那會是一種強制性的。

相關問題