首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows体系结构中的CLR、Win32、WinRT

Windows体系结构中的CLR、Win32、WinRT
EN

Stack Overflow用户
提问于 2013-08-15 10:11:01
回答 2查看 5K关注 0票数 6

我浏览了一下,并发现了类似的问题,所有的反应都是不清楚和模糊的充其量,它使我恼怒的是,没有一个清晰的图片Windows体系结构。Windows中有一些层,在我的脑海中总是这样(从上到下):

.NET

Win32

微核

硬件

硬件

最近我看到了这样的图片:

我很困惑,尤其是似乎CLR与WinAPI并行运行的事实。我想我的问题是:

UPDATE Q:我在哪里可以找到清晰和解释性的资源来描述最新版本(7,8,Server 2012等)的操作系统体系结构?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-15 13:00:49

我假设这个问题是关于WinRT的,否则它就太模糊了,无法回答。

底部的图表很有误导性。它从你作为一个程序员需要知道的角度展示了这个观点。如果你创建了一个WinRT应用程序,那么旧的winapi就不是你直接处理的东西了。它被WinRT api所取代,您应该只使用它来获得操作系统服务。

实现是非常不同的。CLR仍然在winapi之上运行,就像在桌面应用程序中一样。它与非托管代码互操作,Windows基本上是一个非托管操作系统。对于WinRT来说,它也是一个基于COM的非托管api。

实际上,每一个WinRT应用程序都是一个进程外的COM服务器,就像30年前使用过的服务器一样。它确实是在一种特殊的模式下运行的,微软在使UAC工作的管道上增加了一个额外的层。它被称为“应用程序容器”,它的工作方式就像一个沙箱。就像UAC阻止程序访问某些目录或注册表项(如果用户没有被UAC提示符提升)一样,app容器阻止程序使用麻烦的winapi函数。造成可用性或安全性问题或耗尽电池太快的那种。WinRT已经取代了这样的winapi函数。

COM有点臭名昭著,它是微软使用的通用互操作解决方案,但编程并不容易。微软做了大量的工作,使COM更加可用,主要是通过完全隐藏它。值得注意的是,类型库被.winmd文件所取代,这是一个可以表达更多细节的增强版本。他们使用.NET元数据的数据格式。

他们隐藏COM的一个关键方法是内置到各种运行时支持库中的语言投影。对于C++,它隐藏在C++/CX语言扩展和运行库中。对于Javascript,它隐藏在脉轮执行引擎中。对于托管代码,它隐藏在.NET框架中,引用程序集中有TypeForwardedTo。语言投影从WinRT类型和行为转换为特定于语言的类型。基本内容,如COM错误代码被转换为异常。并将WinRT HSTRING类型转换为System.String。等等。

有几个地方的语言投射从裂缝中窥见,在奇怪的表面上可以看到限制。像WinRT组件一样,必须始终是一个密封类,这是COM不支持实现继承的副作用。也可以在组件中公开DateTimeOffset,但不能公开DateTime。而且有些WinRT类型不能很好地映射到.NET类型,IBuffer是臭名昭著的。

票数 15
EN

Stack Overflow用户

发布于 2013-08-15 11:57:16

WinRT主要是一组API,用于为所有受地铁支持的平台(包括用于ARM的Windows8forARM)构建城域应用程序。Windows运行时为Windows体验开发人员提供了大量新API。

来自http://arstechnica.com/features/2012/10/windows-8-and-winrt-everything-old-is-new-again/5/

WinRT名称代表“”。但是,这个并不像微软的.NET运行时那样是运行时,也不同于.NET运行时环境的运行时方式。在.NET和Java的情况下,运行时是一个相对较大的软件组件,它提供虚拟机环境、垃圾收集内存、各种代码安全验证等等。.NET和Java运行时几乎与.NET或Java程序所做的一切密切相关,为软件开发人员提供了广泛的基础设施。 WinRT没有提供任何类似于那些运行时的功能。WinRT是一组提供一系列服务的软件库,提供一系列服务--图形、网络、存储、打印。除此之外,还有一个相对较小的基础设施组件。

在开发地铁风格的应用程序时,.NET框架和公共语言运行时(CLR)与WinRT集成在一起。作为Windows8中的MicrosoftWindowsFramework4.5的一部分,.NET允许编写托管代码的开发人员以自然的方式使用Windows (.NET,http://msdn.microsoft.com/en-us/library/hh694558.aspx)。WinRT在windows 7或以前版本的Windows中不可用。

在上有一篇很棒的文章 at http://arstechnica.com/features/2012/10/windows-8-and-winrt-everything-old-is-new-again/ .in 7 parts,它描述了在“与历史的深处”中的描述,来自COM > .NET > WinRT。要跳入WinRT,请查看第5部分

希望它能澄清你的疑虑。如果有进一步的问题,请告诉我。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18250552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档