WinRT: An Object Orientated Replacement for Win32 对于C++开发者是个好消息吧!?

XIANXir 2011-09-15 08:20:06
WinRT isn’t another abstraction layer; it resides directly on top of the kernel just like the Win32 API. This marks the first major break in the core of Windows since Win32 was introduced in 1993 with Windows NT. WinRT represents a new application execution environment with semantics that are very different than Win32.

Unlike Win32, which was designed with C in mind, the WinRT APIs are written in C++ and designed from the beginning to be object oriented. Consistency, ease of use, and performance are key aspects of the new runtime API. Every object in the WinRT API supports reflection so that even dynamic languages such as JavaScript can use them efficiently. Along with this comes a unified object model, a rarity for C++ based libraries.

Side note: The Win32 API has not been removed and older applications using the traditional application execution environment will continue to work as expected.

C++ Development

User interfaces in C++ will be written primarily in XAML. This libraries for working with XAML have all been ported to C++ and are compiled to native x86. Metro applications written with XAML and C++ do not run on top of .NET, they get compiled directly to x86 just like any other Visual C++ application.

Calling methods on UI controls is just like calling methods on any other object in C++. At the machine code level one pushes the this pointer onto the stack and then invokes a function via a v-table. This allows for the best possible performance even on low power devices.

Libraries used by modern C++ applications such as Boost are supported.
...全文
935 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamgis 2012-10-18
  • 打赏
  • 举报
回复
标记,希望早点结束敲代码的生活
BLooM2 2012-03-24
  • 打赏
  • 举报
回复
http://tirania.org/blog/archive/2011/Sep-15.html
这篇文章讲的非常清楚
BLooM2 2012-03-24
  • 打赏
  • 举报
回复
WinRT 就是个 COM ,从原始的 win32 DLL 调用 转变到COM调用,这样脚本语言可以直接使用
但很鄙视 MS 把 CLI 强加到 C++ 环境中,算法和界面分离变得更重要了。
无趣 2011-12-12
  • 打赏
  • 举报
回复
呵呵,很先进。
mudox 2011-11-21
  • 打赏
  • 举报
回复
我也看了 MSDN 上更新介绍,WinRT 好像是引入一个叫 C++ Component Extension 的技术(该这么翻译么:C++ 的面向组件扩展)
所以我得到信息是:
1. WinRT 是 native 的,和 .Net 是截然不同的。
2. C++ Component Extension 我看是 MS 通过扩展自己的 C++ 编译器,从编译层面上让 C++ 支持 COM 技术,如添加一个简单的 ref 关键字来让用户方便的定义一个基于 reference count 的 coclass object,然后像使用普通 C++ object 一样(构造,调用方法,析构 ……)使用 component object。(而 C++ 编译器内部生成对 vtable 中函数的各种调用,marshaling & unmarshaling,甚至有可能隐藏调用线程/进程透明细节,YY~~)。

MSDN 上 WinRT 的入口(MS 还在不断更新~~)

无趣 2011-11-01
  • 打赏
  • 举报
回复
很有深度,顶一下
XIANXir 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gy984 的回复:]

首先可以明确,调用WinRT不是标准C++
WinRT是Native的,不是.Net的
目前来看 WinRT和.Net没关系

.Net还是基于Win32的
[/Quote]
WinRT和.Net不可能没关系吧!!!Metro style应用不是必须用WinRT的吗???如果.NET和WinRT没关系,那.NET怎么开发Metro style应用啊???
overearth 2011-09-15
  • 打赏
  • 举报
回复
首先可以明确,调用WinRT不是标准C++
WinRT是Native的,不是.Net的
目前来看 WinRT和.Net没关系

.Net还是基于Win32的

XIANXir 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gy984 的回复:]

从昨天到今天,一直找相关资料,也在win8里做的测试,目前情况

WinRT是用C++/CLI写的,内部是C++写的,对外的接口是ref class sealed.
如果使用者是C++, 则会采用reference count析构,如果是.Net,则采用.Net的GC

WinRT现在的情况是只支持Metro style 开发,所以程序如果是传统Win32形式,还点用以前的技术, 基……
[/Quote]
我的理解是:WinRT是标准C++编写的(原因是这样的:C++/CLI本身要依赖.NET,如果用C++/CLI编写WinRT,那岂不是成了WinRT运行与.NET之上了),使用C++编写WinRT程序时,直接使用的是标准C++,并且调用的API也是标准C++;而C++/CLI则是WinRT将编程接口暴露给.NET的途径。。。

我感觉这样比较合理,不知道对不对。。。

有没有这方面的高手讲解一下啊???!!
jackson35296 2011-09-15
  • 打赏
  • 举报
回复
XAML的界面思路绝对是发展趋势,用MFC做界面太繁琐,太低效了
overearth 2011-09-15
  • 打赏
  • 举报
回复
从昨天到今天,一直找相关资料,也在win8里做的测试,目前情况

WinRT是用C++/CLI写的,内部是C++写的,对外的接口是ref class sealed.
如果使用者是C++, 则会采用reference count析构,如果是.Net,则采用.Net的GC

WinRT现在的情况是只支持Metro style 开发,所以程序如果是传统Win32形式,还点用以前的技术, 基于win32的库,MFC, WTL等. 不知道微软有没有计划把WinRT在到传统,非Metro程序中使用。不过Windows 8 是早期开发,所以还是有这个可能的

Windows 8最重要的变化就是WinRT,不知微软有没有想法让这东西到xp, win7上运行,支持。

一开始的时候,一看到WinRT,以为是一个.Net,现在情况来看,它不是,只是用cli 类型导出。不知道众位怎么理解,我的理解就是
微软发展.Net 替换Win32,但没有成功,主要是效率问题。现在做了新的API, 是用C++写的,用CLI导出,这样.Net 也可以用这个API, c#语言也可以用这个API.

.Net只能说成功了一点,Silverlight也成功了一点,至少XMAL的思想成功了


相法就是这么多,不过,一切还在变化中,希望微软能走好路。对比苹果,Cocoa, Cocoa Touch, Objective-C, 界面方案,那边的思想很统一。
XIANXir 2011-09-15
  • 打赏
  • 举报
回复
大概意思是说:WinRT并不是Win32之上的另一个抽象层——就像MFC和.NET那样,而是和Win32一样直接工作于内核之上的Windows API,对是API,Windows之上的另一个API,而且是面向对象的API,所以,它不是C语言编写实现的,而是C++实现的。

由于WinRT本身就是面向对象的,所以C++er编程的时候就不需要向Win32 API那样还得搞一个MFC抽象层,而是直接使用WinRT对象。。。
以后,我们再说用Windows API编程的时候就要说清楚了:是用Win32 API呢,还是用WinRT API呢???

由于WinRT是彻底从新设计的,所以,其结构更加的现代化、舒适——相较于MFC,所以,对于C++开发者,应该是个好消息吧。。。


另外,关于WinRT的内容网上消息好少啊?????
ArcRain 2011-09-15
  • 打赏
  • 举报
回复
看起来不错的样子,有点期待WinRT了。
overearth 2011-09-15
  • 打赏
  • 举报
回复
stackoverflow上面有一个讨论,我觉得好全面
http://stackoverflow.com/questions/7416826/how-does-the-new-windows-8-runtime-compare-to-silverlight-and-wpf
XIANXir 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gy984 的回复:]

引用 8 楼 xianxir 的回复:

引用 7 楼 gy984 的回复:

首先可以明确,调用WinRT不是标准C++
WinRT是Native的,不是.Net的
目前来看 WinRT和.Net没关系

.Net还是基于Win32的

WinRT和.Net不可能没关系吧!!!Metro style应用不是必须用WinRT的吗???如果.NET和WinRT没关系,那.NET……
[/Quote]

谢谢,我明白一点了!!!!
overearth 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xianxir 的回复:]

引用 7 楼 gy984 的回复:

首先可以明确,调用WinRT不是标准C++
WinRT是Native的,不是.Net的
目前来看 WinRT和.Net没关系

.Net还是基于Win32的

WinRT和.Net不可能没关系吧!!!Metro style应用不是必须用WinRT的吗???如果.NET和WinRT没关系,那.NET怎么开发Metro style应用啊???
[/Quote]

哥门,和.Net没关系,只是用了C++/CLI的语法,只有用C#/VB才和.Net有关。

http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/f50be099-ba75-4a47-9f69-207c9080735e
http://www.infoq.com/news/2011/09/C-Component-Extensions

16,481

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧