About .net and winRT

本文关键字:winRT and net About | 更新日期: 2023-09-27 18:33:54

我习惯于在.net中编码,但我对winRT有点陌生,有几个问题:

  1. 当我使用 winRT 和 .net 的子集在 c# 中创建 Metro Windows 应用商店应用时,这是托管应用程序吗?(由CLR主持?或者它是非托管的,.net 部分只是映射到 winRT。
  2. 当引用来自非托管语言(如 c++(的用 c# 编写的 windowsRT 组件时,会发生什么情况?它使用 CLR 还是 100% 本机?

About .net and winRT

这是托管应用程序吗?

WinRT 应用作为进程外 COM 服务器运行。 你使用的大部分代码都是非托管的,例如,你在 XAML 中使用的任何内容都是用C++编写的。 但这是一个很难看到的实现细节,它都被 CLR 内置的语言投影仔细包装了。 这使得所有 WinRT 互操作看起来像托管类。 与添加对 COM 组件的引用的方式不同,它看起来也类似于托管代码。

出于所有实际目的,可以将应用称为托管应用,并使用托管调试器来修复 bug。

它使用 CLR 还是 100% 本机?

原生C++是 100% 原生的。 相反,如果使用 C# 编写 WinRT 组件,并且在 C++ 或 Javascript 应用中使用该组件,则相反,这些应用不知道你是用 C# 编写代码的。 它是它下面的COM是Microsoft用来允许不同语言相互通信的通用胶水。 CLR 负责互操作,就像为 Office 应用编写外接程序或使用 Microsoft.Office.Interop.Excel 自动执行 Excel 一样。

请注意,.winmd 文件对于弥合差距至关重要,它完全等同于 COM 类型库或 .NET 元数据,它以与语言无关的方式告诉编译器接口的外观。 在编写自己的 WinRT 组件时,在某些限制中也可见,因为 COM 不支持实现继承,因此需要密封类。 并且不能是通用的。 您可以公开 DateTimeOffset 但不能公开 DateTime,等等。