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

6

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


你可能想查看这个问题的答案:https://dev59.com/bms05IYBdhLWcg3wJurp - dodgy_coder
1个回答

9
Windows Runtime代表所有API的元数据,各种语言映射(C++、JavaScript和C#)都可以读取这些元数据。
由于API形状在元数据中被描述,因此语言运行时和编译器可以推导出API,并知道如何为这些API生成代码。
对于CLR来说,工作稍微容易一些,因为元数据格式是ECMA 335,这是CLR使用的CLI元数据格式 - 因此CLR的转换稍微容易一些。
但总的来说,只要您拥有机器可读的表示该机器上所有API的元数据,翻译就是直接的。

谢谢你的回答。有没有任何资源或文章描述这个元数据可以在哪里找到?如何创建和读取这个元数据? - gyurisc
我在这里找到了我的问题的答案 - https://dev59.com/bms05IYBdhLWcg3wJurp - gyurisc
2
另一个重大变化是,所有的WinRT组件都有元数据可用,就像.NET程序集一样。在COM中,你可能会用到typelibs,但并不是每个COM组件都有它们。对于WinRT,元数据包含在.winmd文件中——在开发者预览版中查看“C:\Program Files (x86)\Windows Kits\8.0\Windows Metadata"。如果你仔细查看,你会发现它们实际上是没有代码,只有元数据表的CLI程序集。事实上,你可以用ILDASM打开它们。请注意,这并不意味着WinRT本身是托管的——它只是重用了文件格式。 - gyurisc
1
@gyurisc 也请查看 "C:\Program Files (x86)\Windows Kits\8.0\Include\winrt\RoMetadataApi.idl"。 - Pavel Minaev
3
系统中有两组元数据——系统32\winmetadata中的元数据和SDK中的元数据。系统元数据用于JavaScript和CLR在运行时,SDK元数据用于C++和C#应用程序(以及IDE)在编译时。请注意,不可改变原意。 - Larry Osterman
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接