gpt4 book ai didi

.net - Windows体系结构中的CLR,Win32,WinRT

转载 作者:行者123 更新时间:2023-12-04 13:19:42 24 4
gpt4 key购买 nike

我四处浏览,发现了类似的问题,所有答复充其量都是不清楚和模糊的,这使我对Windows体系结构一无所知。 Windows中的某些层在我脑海中总是看起来像这样(从上到下):

[。网]

[Win32]

[微内核]

[HAL]

[硬件]

最近,我看到了这样的图像:

我感到困惑,尤其是关于CLR与WinAPI并行运行的事实。我想我的问题是这样的:

更新
问:在哪里可以找到清晰且说明性的资源,它们描述了Windows的最新版本(7、8,Server 2012等)中的操作系统体系结构?

最佳答案

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

底部的图非常容易让人误解。它从您作为程序员需要了解的角度显示了观点。而且,如果您创建WinRT应用程序,那么您就不会直接处理旧版winapi。它已被WinRT api取代,仅应使用它来获取操作系统服务。

实现是非常不同的。 CLR仍然非常运行在winapi之上,就像在 table 面应用程序中一样。而且它可以与非托管代码进行互操作,Windows从根本上说是一个非托管操作系统。 WinRT也是这种情况,它是基于COM的非托管api。

实际上,每个WinRT应用程序都是一个进程外COM服务器,就像30年前使用的此类服务器一样。它确实以特殊模式运行,Microsoft在管道中添加了一层额外的层以使UAC正常工作。它被称为“应用程序容器”,就像沙盒一样工作。就像UAC阻止程序访问某些目录或注册表项(如果用户未被UAC提示提升)一样,应用程序容器也阻止程序使用麻烦的Winapi函数。会造成可用性或安全性问题或耗尽电池电量的类型。 WinRT替代了此类winapi函数。

COM有点臭名昭著,它是Microsoft使用的通用互操作解决方案,但编程起来并不容易。微软做了很多工作,以使COM更加可用,主要是通过完全隐藏它。值得注意的是类型库已替换为.winmd文件,.winmd文件是一个增强的版本,可以表达更多详细信息。他们将数据格式用于.NET元数据。

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

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

关于.net - Windows体系结构中的CLR,Win32,WinRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18250552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com