QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

WinRT:Win32 的面向对象替代品

2011 年 9 月 18 日

WinRT 不是另一个抽象层;它就像 Win32 API 一样,直接驻留在内核之上。自从 1993 年 Win32 伴随 Windows NT 被引入以来,这标志着对于 Windows 核心的首次重大突破。WinRT 与 Win32 截然不同,它代表了新的语义学应用程序执行环境。

Win32 是按照 C 语言思想设计的,而 WinRT API 与之不同,它是用 C++ 编写的,并且从设计之初就运用了面向对象的思想。一致性、易用性、以及性能都是新的运行时 API 的重要方面。WinRT API 中的每个对象都支持反射,以便甚至连诸如 JavaScript 等动态语言都可有效地使用它们。随之而来还有统一对象模型,这对于基于库的 C++ 而言是个稀罕物。

附注:Win32 API 并未被移除,而且那些使用传统应用程序执行环境的较早的应用程序将继续按预期方式工作。

C++ 开发

在 C++ 中编写用户界面将首选 XAML。所有与 XAML 一起使用的库都已被移植到 C++,并且被编译为本地 x86 版本。使用 XAML 和 C++ 编写的 Metro 风格应用程序并不运行在.NET 之上,它们就像其他任何 Visual C++ 应用程序一样,被直接编译为 x86 版本。

调用 UI 控件的方法就像在 C++ 中调用任何其他对象的方法一样。在机器码级别上,某个指令将 this 指针推送到堆栈上,然后通过虚函数表(v-table)调用相应函数。这使得即使在低功耗设备上也能达到最优的性能。

支持一些现代的 C++ 应用程序所用的库,例如 Boost。

重叠窗口不复存在

对话框是来自上一版 Windows 的核心概念,而在 WinRT 中它将不复存在。对于微软而言,性能成本和可用性问题已不再是理所当然的。希望使用这种模式的应用程序将要开发其他的方式来传递信息,例如消息框的方式。

另一并未纳入 WinRT 的库是 GDI。如果某个应用程序要使用 Metro 风格界面,那么它需要按自上而下的方式来做,将 Metro 风格与经典用户界面相混合的情况是不可能出现的。

PlayTo 契约

另一被公开的契约是 PlayTo(由……发挥)。这使得应用程序可发送如音频及视频等媒体文件到某个 charm[1]。然后那个 charm 将允许用户选择某个他们想用的应用程序来查看该文件。据推测,媒体文件不仅限于物理文件,而是任何可表示为数据流的媒体形式。

C#/VB:平台调用(P/Invoke)之终结

从.NET 中调用本地函数通常涉及建立结构和操纵指针。而在 WinRT 环境下,所有的 API 被公开为许多可通过 C#及 VB 直接使用的对象。这把.NET 开发者置于与 C++ 开发者平等的层面上。

应用程序的响应速度对于微软而言是非常重要的。所有耗时超过 50 毫秒的操作系统级别的 API 调用将被公开为异步操作,正是为了向开发者传递这种价值观。

JavaScript

对于 Windows 8 而言,第四大语言就是 JavaScript。尽管它不使用 XAML,但它就像本地及.NET 应用程序一样,拥有对底层 WinRT API 的直接访问权。这不仅是个像 PhoneGap 一样的容器,JavaScript 开发者还可获得与其他开发者所使用的同样丰富的 API。

由于是 JavaScript,因此所选择的 UI 工具包是 HTML 和 CSS 而非 XAML。IE 10 及 Metro 风格的 JavaScript 应用程序使用的是同一渲染引擎,尽管那些应用程序实际并不运行在浏览器中。JavaScript 应用程序看起来就像任何其他 Metro 风格应用程序一样。

JavaScript 中的用户控件几乎与 C++ 及.NET 中的控件不相上下。有些控件对于 HTML 渲染引擎而言是固有的,而另外一些控件则是用 JavaScript 编写的。这些基于 JavaScript 的控件都是基于 div 的,非常像那些使用 jQuery 创建的控件。

应用程序容器和应用程序权限

Metro 风格应用程序运行在被称为“应用程序容器”(app container)的环境中。这似乎取代了由基于 Win32 应用程序所使用的窗体环境。

大多数 API 调用被直接发送给底层内核。然而,有些调用将被通过系统代理(system broker)路由。系统代理确保应用程序只能访问那些经用户已批准的功能。例如,当某个应用程序首次尝试访问摄像头时,服务代理(service broker)将提示用户以获取他们的批准。应用程序必须包括一份清单,其中注明该应用程序可能需要的所有限制服务。这种模式对于移动设备开发者而言将是非常熟悉的。

所有 Metro 风格应用程序都会运行在 WinRT 的应用程序容器中,而且会受到系统代理的监控,甚至连那些用 C++ 编写的应用程序也不例外。该思想是为了限制应用程序破坏系统的能力。虽然也许并不是不可能的,但是在 WinRT 下创建恶意软件与在 Win32 中相比将会难得多。

所有 Metro 风格应用程序必须进行数字签名

不允许匿名应用程序。应用程序为了测试可进行自签名,但是当它们出现在应用商店里时,它们就必须使用真实证书进行签名。

译注

[1] charm,微软已将“CHARM”注册为计算机、软件产品、电气和科学产品类商标。微软将 CHARM 描述为计算机程序、图形用户界面软件和操作系统程序。在触摸版 Windows 8 中,charms 在屏幕右侧;在传统版(使用鼠标和键盘)Windows 8 中,charms 出现在屏幕左侧。charms 包括:Search(搜索)、Share(分享)、Start(开始)、Devices(设备)、Settings(设置)。详见微软申请Windows 8 功能charm 注册商标(图)

查看英文原文: WinRT: An Object Orientated Replacement for Win32

2011 年 9 月 18 日 13:2610544
用户头像

发布了 55 篇内容, 共 16.1 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

Go语言学习笔记:数组

worry

go 数组

永动金融EGG公链去中心化社交平台与通证EFTalk全球正式亮相

币圈那点事

区块链

Github霸榜半年的阿里并发编程速成笔记究竟有什么魅力?

程序员小毕

Java 程序员 架构 面试 并发编程

十步输出设计文档

Arvin

设计实践

我在阿里实习做开源

apache/dubbo-go

微服务 程序人生 云原生 dubbo dubbogo

蚂蚁二面:MQ消费端遇到瓶颈除了横向扩容外还有其他解决办法?

中间件兴趣圈

面试 RocketMQ 消息中间件

数据库备份真的很重要!很重要!很重要!

xiezhr

oracle sql MySQL 运维 数据备份

Python 分通道读取图像数据,取经之路第 4 天

梦想橡皮擦

28天写作 3月日更

Github连夜下架!阿里新产Java全栈面试突击小册太香了

Java王路飞

Java 程序员 架构 面试 分布式

寻找被遗忘的勇气(二十)

Changing Lin

3月日更

有利可图的NFT,NA公链(Nirvana Chain)NAC公链怎么面对高额Gas费的?

区块链第一资讯

区块链 公链 挖矿

区块链资产追踪系统解决方案,追踪“它”的来龙去脉!

源中瑞-龙先生

软件开发 区块链应用 系统开发 #资产追踪

打通Jira与钉钉和企业微信不再难

YY哥-杨勇

10.5|PPT教程|内容页之图表呈现

青城

[TcaplusDB知识库]TcaplusDB架构描述

TcaplusDB

数据库 nosql Tcaplus

【LeetCode】逆波兰表达式求值Java题解

HQ数字卡

算法 LeetCode 28天写作 3月日更

翻译:《实用的Python编程》07_01_Variable_arguments

codists

Python

TCP 三次握手与四次挥手

insight

TCP 3月日更

MySQL如何选择主键

架构精进之路

MySQL 3月日更

C++线程池ThreadPoolExecutor实现原理

Linux服务器开发

c++ 线程池 后端开发 Linux服务器开发 Linux后台开发

户外媒体启用口罩检测功能?特斯拉车顶广告面世

󠀛Ferry

七日更 3月日更

基于SpringCloud,支持安卓、IOS、包含前后端等等完整网约车项目

Java架构追梦

Java 架构 面试 SpringCloud 网约车项目

这些面试题你会吗?6年菜鸟开发面试字节跳动安卓研发岗,复习指南

欢喜学安卓

android 程序员 面试 移动开发

阿里p8私藏MyBatis笔记,从入门到精通,纵享源码细节

周老师

Java 编程 程序员 架构 面试

这份1307页Android面试全套真题解析,源码+原理+手写框架

欢喜学安卓

android 程序员 面试 移动开发

区块链溯源追溯系统开发,区块链公共服务平台建设方案

WX13823153201

区块链溯源追溯系统开发

国内可用镜像站整理

小任

2月看的9部电影和1本书

金龟换酒

电影 书籍

老板要我开发一个简单的工作流引擎

Java小咖秀

架构 工作流 开发 工作流调度 工作流引擎

2021年Java春招高级面试指南(1到5年Java面试者必备)

比伯

Java 编程 架构 面试 程序人生

配置引起事故复盘

风翱

3月日更

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

WinRT:Win32的面向对象替代品-InfoQ