|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在1995年5月23日以“Java”的名称正式发布了。只管我们可使用.NET言语来挪用Win32API,但那样做会很坚苦。以是在已往的两年间微软一向在构建替换的计划,它就是完成了跨言语撑持的Windows运转时,即WinRT。我们能够在C++和.NET中创立WinRT组件,而且可由两者和JavaScript利用。
只管COM在外表上是一种基于OOP的框架,但它与.NET之间有很年夜的区分。在WinRT呈现之前,COM是基于接口而不是基于类的。这意味着个中短少良多.NET开辟者以为应当有的内容,像机关函数和静态办法等。C++组件扩大办理了这个成绩。
WinRT情势的COM利用的元数据格局和通用言语运转时(CommonLanguageRuntime)不异。这些信息存储在暗示布局的WINMD文件中,只管没有完成,但在一切私有类中城市有。FXCop被用于查验这些文件所表露的API是不是遵守.NETFramework的计划指南。
.NET在最入手下手时就有“API计划委员会(APIDesignBoard)”。受此启示,Windows运转时也会创建API计划委员会来对其举行办理。良多最后的成员都在.NET委员会中,而且良多指南都间接来自于.NET基础类库所遵守的准绳。
Windows运转时会前往HRESULT,而不会抛出非常。关于尽人皆知的HRESULT值来讲,会抛出响应的非常,而关于其他值就只能抛出COMException。
WinRT的IAsyncOperation接口如今利用新的async/await关头字,就像.NET的Task对象一样。
一切Windows运转时的汇合接口都被映照到.NET框架的等价物上。在.NET4.5中增加了IReadOnlyList和IReadOnlyDictionary,用来卖力处置WinRT中的只读汇合。
WinRT和.NETAPI在两个中央没法婚配。WinRT的stream没法间接与.NET的IO.Stream类兼容,可是能够挪用名为AsStream的扩大办法来举行转换。WinRT还具有名为IBuffer的接口,这在.NET中也没法复杂地完成。在此也有一个扩大办法来举行IBuffer和比特数组之间的转换。
我们可使用C#和VB来创立新的Windows运转时程序库,历程十分复杂。为了把类表露为Windows运转时组件,我们只必要把项目范例设置为“WINMD文件”,并确保遵守以下划定规矩:
- API署名只利用Windows运转时的范例
- 布局体只能具有私有的数据字段
- 只同意对XAML控件利用承继,别的范例都必需利用sealed关头字。
- 只撑持内建的泛型
编译这些库以后,我们就能够在C++和JavaScript中挪用它们,就像从.NET中挪用一样复杂。
告诫
因为WinRT是基于COM构建的,以是你一样会有援用计数和mark-and-sweep渣滓接纳器之间没法交融的成绩。关于完成了析构函数开释非内存资本的对象来讲,这是最多见的成绩。我们能够思索挪用“Marshal.FinalReleaseComObject”来办理成绩,可是那自己也存在成绩。
COM作风的marshaling必要在.NET和当地组件之间挪用。只管这一般是可有可无的,可是假如API十分不正式,那末就会呈现成绩。
内建的WinRT库(而不是XAML)是在Metro运转时情况以外供应的。但是,第三方的WinRT库并不是云云。这是WinRT中激活框架(activationframework)的限定,而不是.NET的成绩。
检察英文原文:C#andVisualBasicontheWinRTAPI
译者侯伯薇是InfoQ中文站架构社区编纂,有多年对日和国际项目开辟履历,今朝存眷企业中手艺与实践营业之间的交融和合作。
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net网页编程的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。 |
|