一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

可供C#和Visual Basic調(diào)用的WinRT API

  英文原文:C# and Visual Basic on the WinRT API

 ?。ㄗ髡撸篔onathan Allen 譯者:侯伯薇

  盡管我們可以使用 .NET 語(yǔ)言來(lái)調(diào)用 Win32 API,但那樣做會(huì)很困難。所以在過(guò)去的兩年間微軟一直在構(gòu)建替代的方案,它就是實(shí)現(xiàn)了跨語(yǔ)言支持的 Windows 運(yùn)行時(shí),即 WinRT。我們可以在 C++ 和 .NET 中創(chuàng)建 WinRT 組件,并且可由二者以及 JavaScript 使用。

  盡管 COM 在表面上是一種基于 OOP 的框架,但它與 .NET 之間有很大的區(qū)別。在 WinRT 出現(xiàn)之前,COM 是基于接口而不是基于類的。這意味著其中缺少很多 .NET 開(kāi)發(fā)者認(rèn)為應(yīng)該有的內(nèi)容,像構(gòu)造函數(shù)以及靜態(tài)方法等。C++組件擴(kuò)展解決了這個(gè)問(wèn)題。

  WinRT 形式的 COM 使用的元數(shù)據(jù)格式和通用語(yǔ)言運(yùn)行時(shí)(Common Language Runtime)相同。這些信息存儲(chǔ)在表示結(jié)構(gòu)的 WINMD 文件中,盡管沒(méi)有實(shí)現(xiàn),但在所有公有類中都會(huì)有。FXCop 被用于檢驗(yàn)這些文件所暴露的 API 是否遵循 .NET Framework 的設(shè)計(jì)指南。

  .NET 在最開(kāi)始時(shí)就有“API 設(shè)計(jì)委員會(huì)(API Design Board)”。受此啟發(fā),Windows 運(yùn)行時(shí)也會(huì)建立 API 設(shè)計(jì)委員會(huì)來(lái)對(duì)其進(jìn)行管理。很多最初的成員都在 .NET 委員會(huì)中,并且很多指南都直接來(lái)自于 .NET 基本類庫(kù)所遵循的原則。

  Windows 運(yùn)行時(shí)會(huì)返回 HRESULT,而不會(huì)拋出異常。對(duì)于眾所周知的 HRESULT 值來(lái)說(shuō),會(huì)拋出相應(yīng)的異常,而對(duì)于其他值就只能拋出 COMException。

  WinRT 的 IAsyncOperation 接口現(xiàn)在使用新的 async/await 關(guān)鍵字,就像 .NET 的 Task 對(duì)象一樣。

  所有 Windows 運(yùn)行時(shí)的集合接口都被映射到 .NET 框架的等價(jià)物上。在 .NET 4.5中添加了 IReadOnlyList 和 IReadOnlyDictionary,用來(lái)負(fù)責(zé)處理 WinRT 中的只讀集合。

  WinRT 和 .NET API 在兩個(gè)地方無(wú)法匹配。WinRT 的 stream 無(wú)法直接與 .NET 的 IO.Stream 類兼容,但是可以調(diào)用名為 AsStream 的擴(kuò)展方法來(lái)進(jìn)行轉(zhuǎn)換。WinRT 還擁有名為 IBuffer 的接口,這在 .NET 中也無(wú)法簡(jiǎn)單地實(shí)現(xiàn)。在此也有一個(gè)擴(kuò)展方法來(lái)進(jìn)行 IBuffer 和比特?cái)?shù)組之間的轉(zhuǎn)換。

  我們可以使用 C# 和 VB 來(lái)創(chuàng)建新的 Windows 運(yùn)行時(shí)程序庫(kù),過(guò)程非常簡(jiǎn)單。為了把類暴露為 Windows 運(yùn)行時(shí)組件,我們只需要把項(xiàng)目類型設(shè)置為“WINMD 文件”,并確保遵循以下規(guī)則:

  1. API 簽名只使用 Windows 運(yùn)行時(shí)的類型
  2. 結(jié)構(gòu)體只能擁有公有的數(shù)據(jù)字段
  3. 只允許對(duì) XAML 控件使用繼承,其它類型都必須使用 sealed 關(guān)鍵字。
  4. 只支持內(nèi)建的泛型

  編譯這些庫(kù)之后,我們就可以在 C++ 和 JavaScript 中調(diào)用它們,就像從 .NET 中調(diào)用一樣簡(jiǎn)單。

  警告

  由于 WinRT 是基于 COM 構(gòu)建的,所以你同樣會(huì)有引用計(jì)數(shù)和 mark-and-sweep 垃圾回收器之間無(wú)法融合的問(wèn)題。對(duì)于實(shí)現(xiàn)了析構(gòu)函數(shù)釋放非內(nèi)存資源的對(duì)象來(lái)說(shuō),這是最常見(jiàn)的問(wèn)題。我們可以考慮調(diào)用“Marshal.FinalReleaseComObject”來(lái)解決問(wèn)題,但是那本身也存在問(wèn)題。

  COM 風(fēng)格的 marshaling 需要在 .NET 和本地組件之間調(diào)用。盡管這通常是無(wú)關(guān)緊要的,但是如果 API 非常不正式,那么就會(huì)出現(xiàn)問(wèn)題。

  內(nèi)建的 WinRT 庫(kù)(而不是 XAML)是在 Metro 運(yùn)行時(shí)環(huán)境之外提供的。然而,第三方的 WinRT 庫(kù)并非如此。這是 WinRT 中激活框架(activation framework)的限制,而不是 .NET 的問(wèn)題。

NET技術(shù)可供C#和Visual Basic調(diào)用的WinRT API,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 天天爱综合网 | 亚洲欧洲色天使日韩精品 | 黄网站在线观看 | 免费网站看黄 | 精品免费看 | 亚洲国产高清一区二区三区 | 亚洲狠狠狠一区二区三区 | 精品国产精品国产 | 日本加勒比网站 | 亚洲一区精品视频在线 | 亚洲精品在线不卡 | 成人激情四射 | 青青热久久国产久精品 | 一区二区三区网站在线免费线观看 | 午夜神马视频 | 一级特黄国产高清毛片97看片 | 九九国产在线 | 手机在线黄色网址 | 亚洲香蕉伊在人在线观看9 亚洲香蕉伊综合在人在线 亚洲香蕉影院 | 看全色黄大色黄女视频 | 色婷婷在线播放 | 6080午夜乱理伦片 | 女人张腿让男桶免费视频网站 | 久久影院精品 | 一区二区中文字幕 | 香蕉免费看一区二区三区 | 男女一级毛片免费播放 | www.激情五月 | 国产精品久久久久久久专区 | 免费观看色 | 精品欧美一区二区三区四区 | 国产高清视频a在线大全 | 一本色道久久综合亚洲精品高清 | 一区二区三区免费在线观看 | 九九啪 | 伊人久久大线蕉香港三级 | 婷婷夜夜躁天天躁人人躁 | 中文字幕日韩一区 | 色婷婷欧美 | 69国产成人综合久久精品 | 最近中文字幕无吗免费视频 |