WinRT:Win32的面向对象替代品

WinRT原理深度解析:元数据驱动的跨语言沙箱API设计 WinRT是微软为应对设备形态碎片化而构建的现代系统级API抽象层,其核心在于以ECMA-335元数据为契约、通过投影(Projection)机制实现C++/C#/JavaScript三语言统一调用。它并非替代Win32,而是为其叠加可验证、可组合、生命周期感知的沙箱执行模型,解决传统Windows平台长期存在的API熵增、互操作胶水困境与安全信任赤字三大顽疾。该架构支撑高DPI响应式XAML UI、声明式能力管控与异步优先编程范式,成为UWP及后续Windows App SDK演进的重要基石,也为理解跨平 阅读详情
投递人 itwriter 发布于 2011-09-19 08:01 评论(18) 有5902人阅读   原文链接   [收藏]   « »

  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 注册商标(图)。

  作者:Jonathan Allen 译者:高翌翔

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

  相关博客文章:Windows Runtime(WinRT) 揭秘

BleWinrtDll:WinRT BLE的DLL封装,简化Win32开发 蓝牙低功耗(BLE)是物联网设备通信的主流方式,但在Windows桌面端,Win32程序直接调用WinRT蓝牙API面临异步模型复杂、工程配置繁琐等门槛。将WinRT的BLE能力封装为传统DLL,以C接口导出,可让C++、Qt、C#等应用通过LoadLibrary直接调用,无需迁移UWP。封装层内部处理异步操作同步化、线程切换与GATT服务发现,外部只需简单函数即可完成扫描、连接、读写特征值与订阅通知。这种设计显著降低了上位机集成BLE的难度,特别适合工业测试工具、设备调试软件及老式MFC程序的蓝牙扩展。B 阅读详情

相关推荐

QGIS:安装Deepness插件+应用

简单的描述了deepness的安装应用历程,重点是记录博主本次遇到的坑

fengyi157的博客 2330

如何“干净地”终止 Win32 中的应用程序

如何“干净地”终止 Win32 中的应用程序察看这篇文章对应的产品文章 ID:178893最后更新日期:2004年11月25日版本:2.2本页内容概要更多信息 32 位进程(和 Windows 95 下的 16 位进程) 16 位问题(在 Windows NT 下) 示例代码这篇文章中的信息适用于:概要在理想环境中,某一进程可能会通过某种形式的进程间通信要求另一进程关闭。不过,如果您对希望其关闭的

小发猫 1788

最优化学习笔记1——关于拟牛顿法推导

从2020年3月份到现在,一年的时间里断断续续自学最优化,结合豆瓣读书、知乎等网站上的推荐,翻阅了以下书和课程: Stephen Boyd和Lieven Vandenberghe的《Convex Optimization》,这本书被公认为学习凸优化的必读经典著作,其中大量的篇幅讲应用,讲理论和算法的篇幅稍少一些。在B网站上有Boyd的视频课程,油管上也有,不过只有英文字幕,如果是零基础接触,直接看Boyd的视频稍显费劲,B站上也有凌青老师以《Convex Optimization》为教材的讲解,推荐作为入

xiaofei473的博客 1766

WinRT for Win32 programmers, Part I-Hello WinRT

WinRT, Windows Runtime 是微软的下一代API体系,在Build大会上为人们所熟知。如果说Windows 8是微软的未来的话,那么WinRT则是Win32的未来,对于千千万万的Win32程序员们来说,如果还想继续在Windows平台下发展,那么了解、学习并熟悉WinRT就是你居家旅行的不二之选。 目录:一、什么是WinRT二、开发环境三、Hello WinRT一、...

9861

基于ROS的机械臂手眼标定-Aruco使用与相机标定

基于ROS的机械臂手眼标定-Aruco使用与相机标定 折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂。于是想做一个比较简单易懂易用的手眼标定程序。 程序都是Copy的开源代码,所以也开源出来: 开源地址:https://gitee.com/ohhuo/handeye-calib 作为手眼标定中的重要一环,相机中标定板位姿关系获取直接影响标定精度,我们使用aruco这个开源程序来实现坐标的获取。 #mermaid-svg-WkFpFkV4QqzXMvJ4 .labe

生活不止眼前的苟且 1万+

DSP(数字信号处理器)技术概要

数字信号处理器(digital signal processor,DSP)是一种用于数字信号处理的可编程微处理器,它的诞生与快速发展,使各种数字信号处理算送得以实时实现,为数字信号处理的研究和应用打开了新局面,提供了低成本的实际工作环境和应用平台,推动了新的理论和应用领域的发展。目前,DSP技术在通信、航空、航天。雷达、工业控制、医疗、网络及家用电器等各个领域都得到了广泛应用。 1.1 DSP系统和芯片的结构特点1.1.1 DSP系统的基本结构通过传感数将非电物理量转换为模拟电信号,预处理一般包括放大器和滤

m0_46582485的博客 2万+

【Windows8开发】关于WinRT组件,WinRT dll,Win32 dll,WinRT exe组件的一些尝试

随着Win8的推出,提出了很多新的概念,比如WinRT Component,WinRT dll,WinRT exe component等。基于这些新的概念,进行了很多尝试,本文会把结果分享给大家,希望对大家能有所触发。 1. WinRT Component, WinRT dll,Win32 dll区别与联系 前面系列文章中提到了n多的WinRT Component(WinRT组件)。那

my_business的专栏 1万+

sentaurus学习笔记(HFET_pGate_GaN仿真)(五)

`(sdedr:define-constant-profile`和`(sdedr:define-constant-profile-region`命令用于定义并应用一个恒定的活性硼掺杂浓度剖面`"ndop_GaN_gate_const"`到氮化镓栅极层上,其值为`NpGaN_gate`。- `"Oxide"`指定了这一层的材料名称(在这里代表氧化层),而`"nucleation"`是这一层在仿真中的标识名称。- `"GaN"`指定了这一层的材料名称,而`"GaN_gate"`是这一层在仿真中的标识名称。

qq_52640792的博客 940

WinRT开发系列之基础概念:WinRT不是……

不觉中有两年没有发新博客,主要是项目重心从Win转向Web开发,虽然Web中HTML5也有很多点可以分享,但是总是抵不住懒惰,偶得的一点点心得,weibo一条就过去了。 恰逢进来微软在WinRT上发力,GrapeCity PowerTools也在WinRT上做了一些尝试,作为前期调研的先导部队,我从中还是学到很多,如今,GrapeCity PowerTools的第一个WinRT控件产品...

dengzi4373的博客 1万+

从零开始写一个RTSP服务器(一)RTSP协议讲解

从零开始写一个RTSP服务器系列 从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解 从零开始写一个RTSP服务器(二)RTP传输H.264(待写) 从零开始写一个RTSP服务器(三)一个传输H.264的RTSP服务器(待写) 从零开始写一个RTSP服务器(四)RTP传输AAC(待写) 从零开始写一个RTSP服务器(五)一个传输AAC的RTSP服务器(待写) 从零开始写一个RTSP服务器(...

JT同学的博客 7万+

LM358模拟声音传感器原理图设计,已量产(声音传感器)

最近在做智能家居设备的声音触发模块时,搭了个基于 LM358 的模拟声音传感器电路 —— 不用复杂的专用芯片,靠通用运放就能把环境声音转化为可被单片机 AD 采集的电压信号,成本压得很低,实际调试下来灵敏度和稳定性都够用。今天把这个电路拆解开,聊聊每部分的设计思路。

不脱发的程序猿 467

理解WinRT

WinRT(Windows Runtime)是微软新一代在Win8 Metro下开发框架, 它是一套面向对象、跨语言并且是Native的库。如果有人问我WinRT的核心技术是什么?我的答案是 COM + .Net Metadata + Xaml,这三者可以说是微软这些年所有技术的精华。COM组件技术一直是微软在用户态的核心技术之一, 它让我们可以无缝的以面向对象的方式搭建应用程序,随着.Ne...

weixin_33711647的博客 1万+

【网络安全】Python代码审计高危函数与安全审计建议

Python 灵活且动态的特性使得开发便捷,但同时也带来了严重安全隐患。如果开发者缺乏安全意识,极易引入命令执行、反序列化漏洞及模板注入漏洞。本文总结了 Python 中常见的高危函数、模块和第三方库,并给出对应的审计建议及其原理解析,供安全研究人员和开发者参考。

等风来 416

WinRT for Win32 programmers, Part II-Win32代码移植

说好了这节要介绍Windows Store上架前的准备工作,怎么标题变成了Win32代码移植?这不是坑爹么!还真不是,对于Win32程序员来说,提交应用到Windows Store,你可能遇到的最大的问题就是Win32代码移植。 我这么说是有原因的,且听我一一道来,先来看看目前的形势:1、我们在Win32下已经积累了多年的代码,如果全部抛掉,在WinRT下重新造一套轮子,SQLite,...

282

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Registration-free WinRT 实战:在非打包桌面应用中免注册引用 C++ WinRT 组件(Windows-classic-samples 示例深度解析)

Registration-free WinRT 是 Windows 10 Version 1903 引入的一项新特性,它允许**非打包(non-packaged)桌面应用**直接引用 C++ Windows Runtime 组件,无需将组件注册到系统或把应用打包为 MSIX/AppX。本文以 [Windows-classic-samples](https://link.gitcode.com/i/

gitblog_01007的博客 1000

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[记录][问题]Win32调用C++/WinRT DLL

项目场景:Win32调用C++/WinRT DLL Win32调用C++/WinRT DLL 问题描述: Win32调用C++/WinRT DLL 原因分析: 提示:这里填写问题的分析: 例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。

二次元怪兽的博客 817

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

windows-rsWin32与WinRT对比:选择合适的API

你是否在使用Rust开发Windows应用时,面对Win32与WinRT两套API体系感到困惑?是否纠结于选择原始高效的C风格接口还是现代面向对象的抽象封装?本文将深入剖析windows-rs生态中这两套API的设计哲学、性能表现与适用场景,通过20+代码示例与对比表格,助你在项目中做出最优技术决策。 读完本文你将获得: - 清晰区分Win32与WinRT在Rust中的实现差异 - 掌握wind...

gitblog_00612的博客 1252

对Win8的WinRT环境的一些个人探索

开发者预览版没装,就装了消费者预览版,折腾了很久,关于那个WinRT,有很多疑问: 1、Win32 API是R3和R0沟通的一层纸,所有用户层下调用的函数最终都会通过int3进入内核(Win32——sysenter——Kernel),那WinRT是否也是这样的呢?内核驱动内,如ntoskrnl等会不会有WinRT函数的最终R0入口?还是说WinRT函数原始就是基于Win32写的,接口是W

a1875566250的专栏 7266

NanaZip XAML现代GUI架构深度解析:从WinRT XAML到NanaZip.Modern组件设计完整指南

NanaZip 是一款面向现代 Windows 体验的 7-Zip 衍生压缩软件,用 **XAML 现代界面** 取代了传统 Win32 控件,让压缩/解压工具也能拥有深色模式与 Mica 磨砂效果。本文带你从零读懂它的 **WinRT XAML 架构** 与 `NanaZip.Modern` 组件设计,即使你刚接触 C++/WinRT,也能快速理清这套"把 WinUI 装进 7-Zip"的工程思

gitblog_00146的博客 931

理解WinRT结构

转自: WinRT(Windows Runtime)是微软新一代在Win8 Metro下开发框架, 它是一套面向对象、跨语言并且是Native的库。  如果有人问我WinRT的核心技术是什么? 我的答案是 COM + .Net Metadata + Xaml, 这三者可以说是微软这些年所有技术的精华。 COM组件技术一直是微软在用户态的核心技术之一, 它让我们可以无缝的以面向

xianjian1990的博客 6157

WinGet 中的 Undocked RegFree WinRT:让非打包桌面应用通过应用清单使用 WinRT 组件的完整指南

Undocked RegFree WinRT(非装箱免注册 WinRT)是随 winget-cli 仓库以 git subtree 形式引入的运行时组件,其核心产物 `winrtact.dll` 通过 detours 技术拦截 `RoActivateInstance`、`RoGetActivationFactory`、`RoGetMetaDataFile` 与 `RoResolveNamespac

gitblog_00169的博客 329
上一篇: http://www.cnblogs.com/procoder/archive/2012/03/27/Windows-8-First-Try.html
下一篇: OpenPCTV
macrohasdefined
博客等级 码龄15年 44粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值