Windows 8的开发平台总体上分为两部分:一是全新的WinRT,界面搭配Metro style,二是传统的Win32、.NET(SL)、IE三大平台,界面为传统窗体风格。其中全新的WinRT被微软视为开发者的未来。

  WinRT平台开发又细分为两大方式:一是C/C++搭配XAML,或C#/VB搭配XAML,二是JavaScript搭配HTML/CSS。C、C++、C#、VB、Javascript全部可以直接调用WinRT APIs,这样微软将Native(本地)、Managed(托管)、Dynamic(动态)三大语言运行机制统一了起来。可见,WinRT是微软将Win32、.NET(SL)、IE三大平台进行整合的产物。

  回顾历史,Win32是微软最早推出、发展时间最久的一个开发平台。C++搭配Windows SDK或C++搭配MFC等类库或VB均是Win32平台的开发方式。而COM技术,也作为那个时代的组件模型,为微软的发展建立了不可磨灭的功勋。2000年,微软推出.NET战略,.NET平台开始走入主流。WinForm、WPF以及之后的Silverlight均是.NET时代的产物。而Assembly组件模型,也逐步地在很多领域替代COM技术。

  Win32时代,我称之为“PC时代”。那时的硬件性能普遍较低,所以Win32平台具有非常高效的性能。但是开发效率低下,内存管理复杂,COM技术晦涩难懂、没有统一的数据传递模型等这些问题,使Win32难以适应网络发展的需要。于是微软推出.NET战略,“网络时代”来临。.NET平台从2000年开始,到现在,已经发展了10年左右,微软依次给我们带来了.NET1.1、.NET2.0、.NET3.0、.NET3.5。

  .NET4.0。.NET平台解决了Win32平台的问题,设计了非常优雅的开发接口和庞大类库,开发效率提升了,内存管理引入了GC,Assembly组件模型非常简单,而且还解决了COM技术造成的DLL Hell问题,也带来了统一的数据传递模型XML。但是.NET平台从一开始,就暴露了缺点,由于.NET是建立在Win32基础上的托管API接口,性能下降,系统资源消耗严重,而且和Win32平台交互困难。随着硬件的提升、.NET平台的不断发展优化,性能得到部分提升,跨平台调用方案也一定程度解决了Win32平台的交互问题。但是这些改变,没有根本解决问题,即便微软后来又推出了“改良的.NET平台”——Silverlight,但.NET平台的缺点还是随着“移动时代”的来临,再次暴露无疑。此时WinRT上场了!

  那么,WinRT给我们带来了什么呢?WinRT是“移动时代”需求的产物,那肯定会充满“移动时代”的色彩。第一,WinRT给我们带来了界面上的革命:Metro。新的Metro风格界面更加适合触摸屏操作,更加适合多尺寸的显示屏,全屏的显示方式突出了以内容为中心的理念。第二,WinRT给我们带来了全新的系统级Native API,WinRT APIs是Native的,而且直接建立在系统内核之上,并且还自动获得硬件加速,包装非常类似.NET,既高效又易用。第三,WinRT采用了MVC模式,做到了界面和逻辑的很好分离。XAML和HTML5作为两大界面标记语言同时被采用。第三,WinRT给我们带来了新的组件模型:C++组件扩展。该组件模型是COM和Assembly技术的结合体,可同时被Native、Managed和Dynamic三种类型的语言直接调用。WinRT APIs本身就是使用的C++组件扩展技术实现的,所以做到了C、C++、C#、VB、Javascript的直接调用。WPF、SL、网页应用均可以较小代码调整,即可在WinRT平台运行。第四,WinRT同时支持X86/64、ARM架构,即可在PC上运行,又可在Pad上运行。第五,WinRT全面采用了异步技术。在WinRT中,微软一直遵循一个简单的规则:如果一个API预计耗时超过50毫秒,那么API就是异步的,这样就能确保Metro UI上的操作体验是最好的。第六,WinRT程序在不显示的时候,自动转换为挂起状态,不占用CPU,节省了电能消耗。

  对于传统平台开发,也稍微做下介绍。IE平台更新到了IE10版本,.NET平台更新到了.NET4.5版本。另外,专门提下,传统的网页插件技术已经不能在Metro风格的IE中获得支持。而新的插件技术或者是否还提供插件技术尚不得而知。

  开发工具对应的是Visual Studio 11 和 Expression Blend 5。

  WinRT是一个新的API 集合,具有以下特性:

  • 它实现了Metro UI规范的UI库
  • 为Windows开发人员提供一个简单的UI编程模型,你不需要学习Win32API的那些复杂的API了
  • 它使用XAML-base的UI系统
  • API都设计成了异步的
  • 它和.NET一样是个沙箱的API,自成体系,用于创建AppStore上的应用程序。
  • API的元数据格式是ECMA335,和.NET一样的标准。这是不是意味着以后Mono也可以在xUnit上去实现这样的API呢?

  WinRT包装的新的用户界面系统,和Win32API一样是Com的上层。

  Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验。WinRT会受到.NET、C++、以及JavaScript三者的影响。WinRT不会取代CLR或Win32,而是为那些使用不同语言编写的应用程序提供统一支持,以便它们可使用新的Metro风格用户界面运行于Windows之上。

  WinRT不是为了取代.NET或Win32提供的所有功能,但是它是一个公共平台,以便那些使用不同语言编写的应用程序可使用新的Metro风格界面来运行。当混合C#应用程序基于WinRT创建Metro风格用户界面时,程序中将仍能执行LINQ查询,对于存储、网络、新式应用程序的安全性等方面同样能执行LINQ查询。完整的运行时架构如下图所示:

  在类型上,WinRT必须提供语言无关的类型——integer(整数)、enumerations(枚举)、structures(结构)、arrays(数组)、interfaces(接口)、generic interfaces(泛型接口)、以及runtime classes(运行时类)。引入了被称之为HSTRING的新字符串类型,该类型允许在不进行任何数据复制的情况下,在应用程序与运行时环境之间传输字符串。

  每个WinRT对象都会对应一些接口,其中有两个接口属于每个对象:IUnknown接口,熟悉的COM接口;以及IInspectable接口,用于根据对象所包含的元数据来发现有关该对象的信息。一个对象可能通过接口提供其他功能,然而运行时类会把这些接口集中公开出来。例如,一个FileInformation对象拥有由FileInformation类公开的IStorageItemInformation、IStorageItem、IStorageFile三个接口。

  WinRT对象在编译时被公开给C++应用程序,而对于C#或VB.NET应用程序而言,对WinRT对象的绑定一部分是在编译时完成的,另一部分则是在运行时完成的。HTML或JavaScript应用程序只有在运行时可以看到WinRT对象,而且元数据是动态生成的。

  Metro界面运行在一个不可重入的单线程之上,然而应用程序的其余部分可以从线程池中使用由运行时环境所自动提供的多线程。

  开发者可以用C#语言创建可供C++或JavaScript的WinRT应用程序使用的Windows运行时组件,然而须要遵守一系列规则:“结构体只能拥有公共数据字段;只允许对XAML控件使用继承,其它类型都必须使用sealed关键字;只支持系统提供的泛型。”

Windows Runtime - 面向对象化的C++(并非意味着托管)的更多相关文章

  1. C/C++程序基础-如何理解C++是面向对象化的,而C是面向过程化的

    1:答:C是面向过程化的,但是C++不是完全面向对象化的.在C++中也完全可以写出与C一样过程化的程序,所以只能说C++拥有面向对象的特性.Tava是真正面向对象化的.

  2. Windows Runtime (RT)

    学了sl for wp 开发了1年都没入门,只能说自己的学习欲望太低了. 今天偶然才发现wrt 跟 .net 是2个东西... orz. 得抛弃 sl ,wrt才是未来的主流吧... 这篇文章不错 h ...

  3. .NET 6学习笔记(4)——如何在.NET 6的Desktop App中使用Windows Runtime API

    Windows Runtime API是当初某软为了区别Win32 API,力挺UWP而创建的另一套Windows 10专用的API集合.后来因为一些原因,UWP没火.为了不埋没很有价值的Window ...

  4. win7打开或关闭windows功能 提示“出现错误,并非所有的功能被更改”,管理员权限惹的祸

    2013-07-25 18:12:06 最近要用到windows的telnet功能,本来是很简单的事情,因为管理员权限的问题,花了不少时间,才发现是管理员权限惹的祸,更滑稽的是,自己一直以来都不是管理 ...

  5. QuanbenSoft Windows Runtime (Windows Store)Apps 应用及其框架总览

    Parrot Simple audio repeater for language learners http://www.windowsphone.com/en-au/store/app/parro ...

  6. 将TinyXml快速入门的接口面向对象化(转载)

    作者:朱金灿 来源:http://www.cnblogs.com/clever101 在TinyXml快速入门的系列文章中(详情见本博客),我只是将tinyxml类库解析xml文件的类封装为API接口 ...

  7. 在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。

    参考:1.https://www.cnblogs.com/webtojs/p/9675956.html 2.http://jennal.com/2016/04/28/using-windows-run ...

  8. 天猫首页迷思之-jquery实现整个div的懒加载(2)-插件面向对象化-闭包和原型的实例

    前文有简单的实现了一个制作懒加载的方法,但其实以方法的形式做插件扩展性不强.那么本文就来用面向对象的方法将其制作成一个真正的插件: 我想要的最终的调用效果是: $(".loading&quo ...

  9. Windows Phone Runtime Component 中的类型转换

    Windows Phone Runtime Component 是Windows Phone 平台用来写C++类库的项目类型. 主要目的是让C#和C++进行互操作,引用历史的C++代码,保护知识产权, ...

随机推荐

  1. Win7系统删除微软拼音

    微软拼音会在使用Office时偷偷的安装,都找不到删除的地方.在网上找了很多方法都不灵光,最后用下面的方法成功删除.   在语言设置窗口里,重新添加一次这个输入法,确定保存,然后再删除,就行了. 这个 ...

  2. 学习C# XmlSerializer 序列化反序列化XML

    类.变量常用头: [XmlRootAttribute]:对根节点的描述,在类声明中使用 如:下例的Html类 [XmlType]:对节点描述,在类声明中使用         如:下例的Head类 [X ...

  3. UVA 11235 (游程编码+ST算法)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23846 题目大意:给定一个升序序列,有q次询问,每次询问(L,R) ...

  4. 在线代码格式化,在线JSON校验格式化

    在线代码格式化 http://tool.oschina.net/codeformat/json 在线JSON校验格式化 http://www.kjson.com/ 两个好用工具

  5. ios 开发中出现的 pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug

    主要原因是某部分内存释放的太频繁,解决方法是检查函数的中[xxx release]; 将其注释掉 就行了

  6. 【BZOJ】1090: [SCOI2003]字符串折叠(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1090 随便yy一下.. 设f[i,j]表示i-j的最小长度 f[i, j]=min{j-i+1, f ...

  7. 【C语言】08-数组

    为了让大家更好地学习和理解数组,我们先来认识一下内存中的"地址". 地址 1.计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址.凡存放 ...

  8. Oracle用户信息查询

    1.查看所有用户: select * from dba_users;    select * from all_users;    select * from user_users; 2.查看用户或角 ...

  9. Java8 十大新特性详解(转)

    本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口 ...

  10. 【液晶模块系列基础视频】5.1X-GUI字体驱动1

    ============================= 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:ht ...