WinRT和托管之间的映射如何工作?

gyu*_*isc 6 windows-8 windows-runtime

我听说新的WinRT是一个非托管框架,它基于COM,但不知何故,他们想出了一些东西,使WinRT和托管代码之间的映射更容易.我想知道这种机制是如何工作的?

Rei*_*man 9

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

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

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

但总的来说,只要您拥有机器上存在的所有API的机器可读表示,翻译就很简单.

  • 系统中有两组元数据 - system32\winmetadata中的元数据和SDK中的元数据.系统元数据在运行时用于JavaScript和CLR,SDK元数据在编译时用于C++和C#应用程序(和IDE). (3认同)
  • 另一个重大变化是所有WinRT组件都有可用的元数据,就像.NET程序集一样.在COM中你有点类型与typelibs,但不是每个COM组件都有它们.对于WinRT,元数据包含在.winmd文件中 - 在Developer Preview中查看"C:\ Program Files(x86)\ Windows Kits\8.0\Windows Metadata \".如果你四处寻找,你会发现它们实际上是没有代码的CLI程序集,只有元数据表.实际上,您可以使用ILDASM打开它们.注意,这并不意味着WinRT本身是受管理的 - 它只是重用文件格式 (2认同)