使用Reflector解析Windows Metadata查看WinRT API

來源:互聯網
上載者:User

為什麼我喜歡用Reflector來瀏覽API?因為Reflector只會顯示每個類型自己的成員,自己的成員包括自己定義的新成員也包括改寫自父類的成員,但如果是純繼承自父類且非改寫的成員則不顯示在子類下。這樣類層次會很清晰,每一個類相對於父類增加的成員(也就是增加的功能)一目瞭然。而MSDN則不這樣,它相反,總會把類型所有繼承過來的成員都顯示上,雖然這樣的成員會顯示繼承自父類這樣的資訊,但是冗長的一大頁會讓你立即失去耐心……(不過MSDN作為官方API,或許也是不得不這樣。)

 

所以我喜歡用Reflector先看看類的階層,具體成員意義,有不懂的再去查對應的MSDN解釋。

 

可是最新的WinRT API呢?

 

目前的Reflector貌似還不支援預定義列表中自動解析WinRT程式集,或許未來會加上此類功能的。

 

不過Windows 8 WinRT(Windows Runtime)通過Windows Metadata(Windows中繼資料)來使API可以被多種語言所調用。所以.NET調用WinRT本地API可以不用像調用Win32那樣進行專門的平台叫用(P/Invoke)了。而這個Windows中繼資料的格式.NET使用的格式一樣,都是ECMA-335標準。那麼使用Reflector,ILSpy,Ildasm都可以開啟。

 

Windows 8的Windows中繼資料在:C:\Windows\System32\WinMetadata目錄下。Windows中繼資料都以winmd為副檔名。

 

所以直接開啟這個winmd我們可以用Reflector解析WinRT的API。

 

比如我在查看Metro應用程式開發中的AppBar類型,它繼承自ContentControl,MSDN頁面又是很冗長(http://msdn.microsoft.com/en-us/library/windows/apps/hh701927.aspx),我想馬上看到它特有的成員定義,在MSDN頁面下面查看類型命名空間定義:可以看到它是在Windows.UI.Xaml.Controls命名空間內。

 

於是在Windows 8 Windows中繼資料目錄下找到Windows.UI.Xaml.Controls.winmd,用Reflector開啟,然後找到AppBar類型,如:

 

看到了吧,MSDN寫了一大堆其實它只加了少數屬性(相對父類ContentControl),研究這些屬性就可以了,如果有問題的話再去根據名稱查MSDN這樣很有效率。(當然,這些都是建立在你對他的父類,父類的父類(全部父類)都瞭解的情況下。)

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.