【问题标题】:How does the mapping between WinRT and managed works?WinRT 和托管之间的映射如何工作?
【发布时间】:2011-11-20 18:20:24
【问题描述】:

我听说新的 WinRT 是一个非托管框架,它基于 COM,但不知何故,他们想出了一些方法来简化 WinRT 和托管代码之间的映射。我想知道这个机制是如何工作的?

【问题讨论】:

标签: windows-8 windows-runtime


【解决方案1】:

Windows 运行时表示元数据中的所有 API,各种语言投影(C++、JavaScript 和 C#)都可以读取这些 API。

因为 API 形状是在元数据中描述的,所以语言运行时和编译器可以推断 API 并知道如何为这些 API 生成代码。

对于 CLR,这项工作稍微容易一些,因为元数据格式是 ECMA 335,这是 CLR 使用的 CLI 元数据格式 - 因此 CLR 的翻译稍微容易一些。

但总的来说,翻译很简单,因为您拥有机器上所有 API 的机器可读表示。

【讨论】:

  • 感谢您的回答。是否有任何资源或文章描述了在哪里可以找到此元数据?这个元数据是如何创建和读取的?
  • 我在这里找到了我的问题 - stackoverflow.com/questions/7416826/…
  • 另一个重大变化是所有 WinRT 组件都有可用的元数据,就像 .NET 程序集一样。在 COM 中,你有点像 typelibs 那样,但不是每个 COM 组件都有它们。对于 WinRT,元数据包含在 .winmd 文件中 - 查看 Developer Preview 中的“C:\Program Files (x86)\Windows Kits\8.0\Windows Metadata\”。如果您四处寻找,您会发现它们实际上是没有代码的 CLI 程序集,只是元数据表。实际上,您可以使用 ILDASM 打开它们。请注意,这并不意味着 WinRT 本身是受管理的 - 它只是重复使用文件格式
  • @gyurisc 还可以查看“C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\RoMetadataApi.idl”。
  • 系统中有两组元数据——system32\winmetadata中的元数据和SDK中的元数据。系统元数据在运行时用于 JavaScript 和 CLR,SDK 元数据在编译时用于 C++ 和 C# 应用程序(以及 IDE)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2012-01-03
  • 2011-04-03
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
相关资源
最近更新 更多