WinRT XAML - 托管和非托管 - 它是如何工作的?

时间:2012-01-30 15:18:35

标签: c++ xaml clr windows-runtime c++-cx

关于新的WinRT API以及针对它的语言(直接或间接)以及它们与XAML的关系,我不明白。

  1. .NET语言(C#,VB.Net,F#)可用于构建XAML Metro 在受限制的'上运行的应用程序CLR反过来在WinRT上运行
  2. C ++可用于构建直接运行的非托管XAML应用程序 WinRT API的顶部
  3. 我的问题是这样 - 方案1中的XAML是否转换为BAML,然后转换为MSIL(根据传统的.NET应用程序),或者是否有新的机制?如果没有,那么构建非托管应用程序的编译器如何将相同的XAML转换为本机指令?这两种方案是否可以使用相同的编译策略解决?如果是这样,那怎么样?

1 个答案:

答案 0 :(得分:6)

在方案1中编写metro应用程序时,您不再使用.Net XAML实现System.Windows.Controls命名空间,而是使用Windows.UI.Xaml.Controls中的XAML控件。

新命名空间中的XAML实现现在是WinRT的一部分,因此它是不受管理的。当您在metro .Net应用程序中使用这些控件时,您实际上正在为这些WinRT控件使用Runtime Callable Wrappers。

当您在非托管C ++ metro应用程序中使用XAML时,您使用的是无人值守的WinRT控件,所以是的,它们被编译为本机代码,但没有从.Net到本机代码的转换。