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

Windows 8 WinRT和托管之间的映射是如何工作的?,windows-8,windows-runtime,Windows 8,Windows Runtime,我听说新的WinRT是一个非托管框架,它基于COM,但不知怎的,他们想出了一些办法,使WinRT和托管代码之间的映射更容易。我想知道这个机制是如何工作的?Windows运行时表示元数据中的所有API,各种语言投影(C++、JavaScript和C#)都读取这些API 因为API形状是在元数据中描述的,所以语言运行时和编译器可以对API进行推理,并知道如何为这些API生成代码 对于CLR来说,这项工作稍微容易一点,因为元数据格式是ECMA 335,这是CLR使用的CLI元数据格式,因此转换对于CL

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

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

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

对于CLR来说,这项工作稍微容易一点,因为元数据格式是ECMA 335,这是CLR使用的CLI元数据格式,因此转换对于CLR来说稍微容易一点


但是,一般来说,由于机器上存在的所有API都具有机器可读的表示形式,因此翻译很简单。

您可能希望在此处查看此问题的答案:谢谢您的回答。是否有任何资源或文章描述此metdata的位置?这个元数据是如何创建和读取的?我在这里找到了一个解决问题的方法-另一个大的变化是所有WinRT组件都有可用的元数据,就像.NET程序集一样。在COM中,有点像typelibs,但不是每个COM组件都有。对于WinRT,元数据包含在.winmd文件中-请查看开发人员预览中的“C:\Program files(x86)\Windows Kits\8.0\Windows元数据”。如果仔细观察,您会发现它们实际上是没有代码的CLI程序集,只有元数据表。事实上,你可以用ILDASM打开它们。注意,这并不意味着WinRT本身是受管理的——它只是重用文件format@gyurisc还可以查看“C:\Program Files(x86)\Windows Kits\8.0\Include\winrt\rometadaapi.idl”。系统中有两组元数据—system32\winmetadata中的元数据和SDK中的元数据。系统元数据用于运行时的JavaScript和CLR,SDK元数据用于编译时的C++和C语言应用程序(IDE)。