有一种叫做投影类型的WinRT。 例如,在元数据,所述IXamlType.UnderlyingType
定义为:
TypeName UnderlyingType { get; }
在C#应用程序中使用。然而时,变化如下:
Type UnderlyingType { get; }
我的问题是 - 有关于规则,API的任何文件,属性用于这样的映射?
有一种叫做投影类型的WinRT。 例如,在元数据,所述IXamlType.UnderlyingType
定义为:
TypeName UnderlyingType { get; }
在C#应用程序中使用。然而时,变化如下:
Type UnderlyingType { get; }
我的问题是 - 有关于规则,API的任何文件,属性用于这样的映射?
这是正确的,建立在CLR地图WinRT的类型自动CLR类型的语言投影。 文档是很难得的,尤其是现在,当这仍然是测试版材料。 但有可用的优秀白皮书,介绍了CLR投影的某些方面。 下载是(目前) 可在这里 (注意:Word .docx文件)
当使用较低水平的创作工具(MIDL与/ WinRT的开关和MDMERGE),组件中的任何地方,通常会使用typedef创建的窗口元数据,所述的typedef被替换为相同组件内部typerefs哪个点。
其允许CLR重写winmd文件与相应的CLR类型更换窗口运行时类型的内容。 的最简单的例子是在Windows.Foundation.Uri类型被替换的System.Uri到C#的应用程序。 在CLR内部知道如何WFUri和S.Uri之间的映射,它会自动执行此翻译为您服务。
所有这一切都是由系统自动处理的,也有它的规则,但我不认为这个过程是可控的开发商 - 我相信,类型映射烧入CLR实现。
这是我说的链接大约是在9频道的视频http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-874T请注意,这是它是基于生成会议的视频开发者预览版。 我无法预测有多少这些信息与消费者预览版已经改变。
我认为,应该有这个是如何工作的文档。 希望他们将很快更新MSDN文档。
他们说,源代码就是最好的文档。 在这种情况下,它似乎是唯一的文档。 以下是通过.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
文件以获取元数据导入。 然后,它会做这样的转换IMap
到IDictionary
对你,你细读的元数据。 我猜测,但我敢肯定这是从生成的元数据或接口实现类定义时什么的Visual Studio一样。
您还可以包括与宏迭代头到自己的C / C ++项目,并从它在其中将数据转换任何形式对你最有用的,比如生成代码。