WinRT的投影类型的文档(WinRT Projected types documentation)

2019-09-17 09:19发布

有一种叫做投影类型的WinRT。 例如,在元数据,所述IXamlType.UnderlyingType定义为:

TypeName UnderlyingType { get; }

在C#应用程序中使用。然而时,变化如下:

Type UnderlyingType { get; }

我的问题是 - 有关于规则,API的任何文件,属性用于这样的映射?

Answer 1:

这是正确的,建立在CLR地图WinRT的类型自动CLR类型的语言投影。 文档是很难得的,尤其是现在,当这仍然是测试版材料。 但有可用的优秀白皮书,介绍了CLR投影的某些方面。 下载是(目前) 可在这里 (注意:Word .docx文件)



Answer 2:

当使用较低水平的创作工具(MIDL与/ WinRT的开关和MDMERGE),组件中的任何地方,通常会使用typedef创建的窗口元数据,所述的typedef被替换为相同组件内部typerefs哪个点。

其允许CLR重写winmd文件与相应的CLR类型更换窗口运行时类型的内容。 的最简单的例子是在Windows.Foundation.Uri类型被替换的System.Uri到C#的应用程序。 在CLR内部知道如何WFUri和S.Uri之间的映射,它会自动执行此翻译为您服务。

所有这一切都是由系统自动处理的,也有它的规则,但我不认为这个过程是可控的开发商 - 我相信,类型映射烧入CLR实现。



Answer 3:

这是我说的链接大约是在9频道的视频http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-874T请注意,这是它是基于生成会议的视频开发者预览版。 我无法预测有多少这些信息与消费者预览版已经改变。

我认为,应该有这个是如何工作的文档。 希望他们将很快更新MSDN文档。



Answer 4:

他们说,源代码就是最好的文档。 在这种情况下,它似乎是唯一的文档。 以下是通过.NET源洞穴探险我的发现。

元数据投影列表中被编码使用宏迭代.NET源 。

这头被包含在它转化为数据结构手头的任务不同的地方。 最容易到达的地方,我们说,我发现在WinMD元进口商及其适配器 。 从来源:

// This metadata importer is exposed publically via CoCreateInstance(CLSID_CorMetaDataDispenser...).
// when the target is a .winmd file. It applies a small number of on-the-fly
// conversions to make the .winmd file look like a regular .NET assembly.

我的观点是,你可以使用CoCreateInstance(CLSID_CorMetaDataDispenser...)来创建一个IMetaDataDispenser ,调用OpenScope()与IID_IMetaDataImport.winmd文件以获取元数据导入。 然后,它会做这样的转换IMapIDictionary对你,你细读的元数据。 我猜测,但我敢肯定这是从生成的元数据或接口实现类定义时什么的Visual Studio一样。

您还可以包括与宏迭代头到自己的C / C ++项目,并从它在其中将数据转换任何形式对你最有用的,比如生成代码。



文章来源: WinRT Projected types documentation