6

WinRTには投影型と呼ばれるものがあります。たとえば、メタデータでは、IXamlType.UnderlyingTypeは次のように定義されます。

TypeName UnderlyingType { get; }

ただし、C#アプリで使用すると、次のように変更されます。

Type UnderlyingType { get; }

私の質問は-そのようなマッピングに使用されるルール、API、属性に関するドキュメントはありますか?

4

4 に答える 4

2

その通りです。CLR に組み込まれている言語プロジェクションは、WinRT 型を CLR 型に自動的にマップします。ドキュメントは、特にこれがまだベータ マテリアルである現在、入手するのが困難です。しかし、CLR プロジェクションのいくつかの側面を説明した優れたホワイト ペーパーが利用可能です。ダウンロードは(現在)ここから入手できます(注:Word .docxファイル)

于 2012-05-21T12:16:13.253 に答える
2

低レベルのオーサリング ツール (/winrt スイッチと MDMERGE を使用した MIDL) を使用して Windows メタデータを作成すると、通常は typedef を使用するアセンブリ内のすべての場所で、typedef が同じアセンブリ内を指す typeref に置き換えられます。

これにより、CLR は winmd ファイルの内容を書き換えて、Windows ランタイムの型を対応する CLR の型に置き換えることができます。これの最も単純な例は、Windows.Foundation.Uri 型が C# アプリケーションの System.Uri に置き換えられることです。CLR は、WFUri と S.Uri の間のマッピング方法を内部的に認識しており、この変換を自動的に行います。

これらはすべてシステムによって自動的に処理され、そのためのルールがありますが、プロセスが開発者によって制御可能であるとは思いません。型マッピングは CLR 実装に焼き付けられていると思います。

于 2012-05-21T14:12:05.633 に答える
1

彼らは、ソース コードが最高のドキュメントであると言います。この場合、それが唯一のドキュメントのようです。以下は、.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...)してOpenScope()IMetaDataDispenser呼び出し、メタデータ インポーターを取得するために使用できます。次に、メタデータを閲覧するときに、のような変換を行います。推測ではありますが、メタデータまたはインターフェイスの実装から型定義を生成するときに Visual Studio が行うことは確かです。IID_IMetaDataImport.winmdIMapIDictionary

マクロ反復子を含むヘッダーを独自の C/C++ プロジェクトに含めて、その中のデータを最も便利な形式に変換することもできます (コードを生成するなど)。

于 2015-04-16T13:11:26.430 に答える
1

これは私が話していた Channel 9 のビデオのリンクですhttp://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-874T開発者プレビュー。この情報が Consumer Preview でどの程度変更されたかは予測できません。

これがどのように機能するかについての文書が必要であることに同意します。うまくいけば、彼らはすぐに MSDN のドキュメントを更新します。

于 2012-05-21T11:33:26.307 に答える