この記事は機械翻訳されたものです。

Windows ランタイムのコンポーネント

.NET 環境における Windows ランタイムのコンポーネント (機械翻訳)

Jeremy Likness

コード サンプルのダウンロード

Windows ストアのアプリとして知られているプログラムの新しい種類 — Windows 8 のデバイス上で実行するように最適化 — コンテンツ焦点であるのでフルスクリーン ウィンドウとは気が散るクローム表示既定があります。 Windows ストアのアプリは、適応し、さまざまな画面サイズや解像度にスケールの流体のレイアウトをサポートします。 彼らは、従来のキーボードとマウスの完全なサポートを提供しながらタッチ最初の経験を提供します。

Windows ストアのアプリは新しい Windows ランタイム (WinRT) と呼ばれる Api のセットを実行します。 Windows のランタイム、Windows 8 OS と一緒に自分自身を開発することができますサードパーティ製のコンポーネントの一部として組み込まれているコンポーネントを公開します。 いくつか Windows のコア ランタイム コンポーネントは、デスクトップ アプリケーションからアクセスできますが、サード パーティ Windows のランタイム コンポーネントのみ Windows 8 環境で使用できるからです。 WinRT タイプは、.winmd 拡張子を持つ WinRT メタデータ ファイルを使用して説明します。 これらのファイルは、同じ標準クラスについては、ECMA 335 メタデータの定義とセマンティクスを提供するため、Microsoft .NET Framework を使用してを使用してエンコードされます (を参照してください bit.ly/sLILI)。

すばやく (通常は c:\windows\system32) Windows のシステム ファイルを含むディレクトリに変更することによって Windows 8 マシン上の型定義に移動できます。 そのディレクトリ内のフォルダーに­トーリー党 WinMetadata と呼ばれるにはすべての型の定義が含まれています。 ILDasm.exe ユーティリティでは、種類を探索できます。 Visual Studio 2012 コマンド プロンプトを開き、c:\windows\system32\WinMetadata フォルダーに移動し、コマンド行で次を入力します。

Ildasm.exe windows.web.winmd

同様の結果を参照してくださいする必要があります図 1。 ILDasm.exe ユーティリティでは、すべての名前空間とその特定の Windows のランタイム コンポーネントの定義の型を検査できます。

Inspecting WinRT Types
図 1 WinRT 型の検査

注意する興味深いものは、ファイルに含まれるコードがないことです; メタデータ情報のみ利用可能です。 コンポーネントは、基になる OS の一部です。 ネイティブ コードで作成された可能性が最も高いです。 言語の投影と呼ばれるユニークな機能は、Windows (ネイティブおよびマネージ) ランタイム Windows ストア アプリケーション開発をサポートする任意の言語からアクセスするコンポーネントができます。

投影とマッピング

C#、Visual Basic、C++ および java スクリプトを含む多くの言語は Windows 言語プロジェクションをサポートするために 8 に更新されています。 これは、Windows ランタイム コンポーネントを複数の言語を使用して自然な方法でアクセスすることができます。 投影は、WinRT 型を公開するオブジェクトまたは Windows ストアのアプリを開発するのに使用されている言語をネイティブなクラスとして処理します。 次のコードは c# を使用してビルド Windows ストア アプリケーションから直接ネイティブ Windows 実行時コンポーネントにアクセスします。

var ui = new CameraCaptureUI();

CameraCaptureUI Windows ランタイム コンポーネントです。 マネージ c# 型コンポーネントではないが、簡単にアクセスするそれと同様に c# コード内から参照できます。 これは、ネイティブの CLR 型をマネージ コードとして表示される CLR は、自動的に Windows ランタイムはメタデータを使用してコンポーネントのランタイム呼び出し可能ラッパー (RCW) を生成するためです。 詳細については、MSDN ライブラリの記事は、「ランタイム呼び出し可能ラッパー」を参照してください bit.ly/PTiAly. RCW 簡単で、これらのコンポーネントとの対話を簡単になります。 また、逆のことも言えます。 投影可能 Windows ランタイム コンポーネントを作成したマネージ コードと C++ に参照するコード ネイティブ コードからと HTML/JavaScript プロジェクト内からの JavaScript オブジェクトとして入力します。

基本型は、c# 型として自動的に表示されます。 Windows のランタイムには .NET コード文字列オブジェクトとして表示されます、ELEMENT_TYPE_STRING タイプがあります。 ELEMENT_TYPE_I4 スカラーを Int32 として表示されます。 CLR はまた WinRT の特定種類をし、それらを .NET の同等としてコードで表示されるようにマップします。 たとえば、固定サイズのコレクションの WinRT 型 IVector <T> ですが、この型が IList の <T> として自動的に表示されます。 .NET のコードです。 WinRT HRESULT で .NET Framework 例外の種類として表示されます。 CLR は、マネージとネイティブの表現間これらのタイプに自動的にマーシャ リングします。 ストリームなどのいくつかの種類では、CLR で提供される拡張メソッドを使用して明示的に変換できます。 この方法でマップされている型の一覧については、MSDN デベロッパー センターのトピックには、「.NET フレームワーク マッピングの WinRT タイプ」を参照してください bit.ly/PECJ1W

これらの組み込みの機能、独自 Windows ランタイム c# と Visual Basic のマネージ コードを使用してコンポーネントを作成する開発者を有効にします。 Visual Studio 2012 は Visual Basic、c#、C++ からの Windows 実行時コンポーネントの作成にテンプレートを提供します。 これらのコンポーネントは消費し、java スクリプトの設定を含む Windows 実行時をサポートしている他の言語から呼び出すことができます。 このため、Windows のランタイム コンポーネントを c# で作成するいくつかの特定のルールに従う必要があります。

規則によって遊ぶこと

一般的には、WinRT 型 c# で作成するルールはすべて公開されている型とメンバーのコンポーネントを提供しますに関連しています。 Windows のランタイム コンポーネント WinRT 型システムでバインドする必要がありますので、制限が存在します。 規則の完全なセットは、MSDN デベロッパー センターのトピックでは、"作成 Windows ランタイム コンポーネントの c# と Visual Basic は、"に記載されています bit.ly/OWDe2A。 フィールド、パラメーター、公開する戻り値すべて WinRT 型 (WinRT 型に自動的にマップされる .NET 型を公開するは大丈夫です) する必要があります。 順番にこれらの種類を提供公開する独自の WinRT 型を作成、同一のルール セットに従うことができます。

別の制限は、任意のパブリック クラスまたはインターフェイスが、公開するジェネリックまたはできません任意非 WinRT インターフェイスを実装することです。 彼らは非 WinRT タイプから派生できません。 Windows のランタイム コンポーネントのルート名前空間"Windows"と順番に開始できません、アセンブリ名と一致する必要があります。地域内には公共の構造も、のみ値型のパブリック フィールドに制限されます。 ポリモーフィズムは、WinRT の種類に利用可能ではないし、あなたが来ることができる最も近い WinRT インターフェイス; の実装 sealed としては Windows ランタイム コンポーネントによって公開されるすべてのクラス宣言する必要があります。

これらの制限は、特に重要なリファクタリングを必要とするレガシ コードとを扱っている場合は、あなたのアプリケーション内のコンポーネントを統合することに代わるアプローチを検討する理由かもしれない。 可能な代替アプローチは後で説明します。 制限は、Windows ランタイム コンポーネント WinRT 環境内で適切に機能することができます、参照およびできる C++ や java スクリプトの設定を含む、すべての言語環境からと呼ばれることを確認することが重要です。

サムネイルの発電機

単純なアプリケーションは、マネージ Windows ランタイム コンポーネントを c# で作成し、c#、JavaScript や C++ で構築 Windows ストア app から消費する方法を実演します。 コンポーネントは、WinRT IStorageFile インターフェイスによって渡されるイメージ ファイルへの参照を受け入れます。 100 X 100 ピクセルのサムネイル イメージを作成し、Windows ストア アプリケーションのローカル ストレージに保存します。 それ最後にサムネイルをポイントする URI を返します。 関連する手順が含まれます。

  1. ソリューションに Visual Studio 2012 を作成します。
  2. Windows のランタイム コンポーネントをビルドします。
  3. 言語固有のプロジェクトは、c#、JavaScript や C++ で作成します。
  4. Windows のランタイム コンポーネントを参照します。
  5. 画像を選択するユーザーを有効にする各プロジェクトのための UI を構成を設定します。
  6. イメージを表示します。
  7. Windows のランタイム コンポーネントを呼び出します。
  8. サムネイルを表示します。

プロジェクトとソリューションを作成します。

視覚のスタジオ 2012 内 (この場合、c#) で選択した言語を指定して、Windows ストア アプリケーション テンプレートを選択する開始します。 テンプレートは、具体的には Windows のランタイム コンポーネントを生成するため存在します。 このテンプレートを選択しに示すように、同じ名前のソリューションと ThumbnailLibrary と呼ばれるコンポーネントを作成図 2

Creating the Windows Runtime Component Project
図 2 Windows ランタイム コンポーネント プロジェクトの作成

この例では、ThumbnailMaker と呼ばれる 1 つのクラスを作成します。 プライベート メソッドは非同期的にサムネイルを生成するタスクを返します。

private static async Task<Uri> GenerateThumbnail(IStorageFile file)
{
}

メソッド内の最初のステップは、ストレージからファイルを開き、WinRT bitmapdecoder がイメージ ストリームのデコードに使用します。

using (var fileStream = await file.OpenReadAsync())
{
  var decoder = await BitmapDecoder.CreateAsync(fileStream);
}

次に、ファイルのサムネイルを保持するアプリケーションのためのローカル ストレージに作成されます。 「サムネイル」は、ソース ファイルと同じ拡張子を持つが名前になります。 一意な名前を生成するオプションは、以前の操作を上書きすることがなく、複数のサムネイルを生成できることを確実に:

var thumbFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
  string.Format("thumbnail{0}", file.FileType),
  CreationCollisionOption.GenerateUniqueName);

エンコーダーがデコードされたストリームから作成されます。 それは単に 100 x 100 ピクセルのビットマップをスケーリングし、それをファイル システムに書き込みます。

using (var outputStream =
  await thumbFile.OpenAsync(FileAccessMode.ReadWrite))
{
  var encoder = await BitmapEncoder.CreateForTranscodingAsync(
    outputStream,
    decoder);
  encoder.BitmapTransform.ScaledHeight = 100;
  encoder.BitmapTransform.ScaledWidth = 100;
  await encoder.FlushAsync();
}

最後のステップはファイルを指す URL を構築することです。 特別な ms appdata プレフィックスは、ローカル記憶域にファイルを参照する使用されます。 リファレンス コンテンツの「どのようにする参照コンテンツ」MSDN デベロッパー センター トピックを読んで、Uri を使用する方法の詳細について学習する bit.ly/SS711o。 トピックは、HTML と JavaScript のですが、リソースへのアクセスに使用する規則を使用しているどのような言語のオプションに関係なく同じです。

const string URI_LOCAL = "ms-appdata:///Local/{0}";
var storageUrl = string.Format(URI_LOCAL, thumbFile.Name);
return new Uri(storageUrl, UriKind.Absolute);

C# で記述された Windows ランタイム コンポーネントは、Windows ストア アプリケーション プロファイルを許可されている任意の .NET 機能を使用できます。 前述したように、ただし、パブリックの型とインターフェイス WinRT 種類のみを公開する必要があります。 有効な WinRT 型作業ではありませんので、パブリック メソッド、コンポーネントの WinRT IAsyncOperation <T> を公開する必要があります。 代わりに入力します。 幸いにも、拡張メソッド、WinRT IAsyncOperation 型には、.NET のタスクの種類を簡単に変換するここに示すように存在します。

public IAsyncOperation<Uri> GenerateThumbnailAsync(IStorageFile file)
{
  return GenerateThumbnail(file).AsAsyncOperation();            
}

コンポーネントを今完了、Windows ストアのアプリからの消費のために準備をコンパイルできます。

ボンネットの下に。メタデータ

Windows ランタイム コンポーネントをビルドし、ソリューション エクスプ ローラーでプロジェクト名を右クリックして「Windows エクスプ ローラーで開いているフォルダー」を選択する出力ディレクトリに移動しますBin \debug サブディレクトリに移動すると、メタデータ ファイルを ThumbnailLibary.winmd という名前のコンポーネントの生成を見つけることができます。 ILDasm.exe でファイルを開く場合は、戻り値の型のコンポーネントに対するインターフェイスが生成されていることがわかります。

Windows.Foundation.IAsyncOperation <Windows.Foundation.Uri>

これらのコンポーネントにマッピングされていた WinRT タイプです。 また、メタデータを検査し、CLR プロジェクトの WinRT タイプを参照してくださいすることが可能です。 このような特別な/project 拡張子を持つ同じメタデータ ファイルを開きます。

Ildasm.exe/project ThumbnailLibrary.winmd

戻り値の型として表示されます。

Windows.Foundation.IAsyncOperation <System.Uri>

URI の WinRT バージョン .NET に相当すると予測されて注意してください。 メソッド シグネチャを消費するには、Windows の店の apps の有効な WinRT 種類すべて公開しますが、マネージ コードからすべての型は .NET クラスとして表示されます。 /Project の拡張機能では、どのように投影 Windows ランタイム コンポーネントのマネージとアンマネージの署名に影響を与えるを検査できます。

C# から消費します。

それはクラス ライブラリを参照するよりも違うのでから c# コンポーネントを消費見覚えがあるはず。 あなただけのターゲットが他のマネージ コードの場合 Windows のランタイム コンポーネントを構築する理由はないことに注意してください。 あなたは、WinRT プロジェクトを参照するだけと、普通 c# クラスのライブラリからの場合と同様のクラスを消費します。 サンプル コードでは、CSharpThumbnails プロジェクトは、ThumbnailLibrary への参照があります。 メイン ページの XAML は、写真を選択するユーザーのためのボタンを定義し、元の画像とサムネイルのバージョンをホストする 2 つの画像が含まれています。 図 3 基本的な XAML マークアップを示します。

図 3 Windows ストア アプリケーションを c# で構築のための XAML

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="Auto"/>
  </Grid.RowDefinitions>
  <TextBlock
    Text="Tap the button below to choose an image to generate a thumbnail."
    Style="{StaticResource BodyTextStyle}"
    Margin="12"/>
  <Button Content="Pick Image" Grid.Row="1" Margin="12"
    Click="Button_Click_1"/>
  <TextBlock Text="Thumbnail:" Style="{StaticResource BodyTextStyle}"
    Grid.Row="2" Margin="12"/>
  <Image x:Name="ThumbnailImage" HorizontalAlignment="Left" Stretch="None"
    Grid.Row="3" Margin="12"/>
  <TextBlock Text="Source Image:" Style="{StaticResource BodyTextStyle}"
    Grid.Row="4" Margin="12"/>
  <Image x:Name="SourceImage" HorizontalAlignment="Left" Stretch="None"
    Grid.Row="5" Margin="12"/>
</Grid>

分離コードは、WinRT FileOpenPicker コンポーネントのインスタンスを作成し、画像を閲覧するように構成します。

var openPicker = new FileOpenPicker
{
  ViewMode = PickerViewMode.Thumbnail,
    SuggestedStartLocation = PickerLocationId.PicturesLibrary
};
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".png");

ピッカーが呼び出され、有効なファイルが見つからない場合は、単純なダイアログが表示されます。

var file = await openPicker.PickSingleFileAsync();
if (file == null)
{
  var dialog = new MessageDialog("No image was selected.");
  await dialog.ShowAsync();
  return;
}

ソース イメージは、[表示を有線です。 ファイルは、サムネイルを生成する、Windows のランタイム コンポーネントに渡され、戻って渡された URI を使用してサムネイル画像の表示を設定します。

 

using (var fileStream = await file.OpenReadAsync())
{
  SourceImage.Source = LoadBitmap(fileStream);
  var maker = new ThumbnailMaker();
  var stream = RandomAccessStreamReference
    .CreateFromUri(await maker.GenerateThumbnailAsync(file));
  var bitmapImage = new BitmapImage();
  bitmapImage.SetSource(await stream.OpenReadAsync());
  ThumbnailImage.Source = bitmapImage;
}

図 4 これは彫られたカボチャを取った写真に対して実行した結果を示しています。

Windows Store Thumbnail App Built Using C#
図 4 c# を使用してビルド Windows ストア サムネイル アプリ

JavaScript からの消費します。

正規の c# クラス ライブラリとは異なり、Windows のランタイム コンポーネントは Windows ストアのアプリ (コア OS の一部である Windows ランタイム コンポーネントと同様にデスクトップ アプリケーションから呼び出すことができます) を作成するためにサポートされている任意の言語から呼び出すことができます。 この動作を確認するには、HTML と JavaScript を使用してサムネイルのアプリケーションを作成できます。 このプロジェクトは、付属のサンプル コードのダウンロードでは JavaScriptThumbnails と呼ばれます。 最初のステップは、JavaScript を使用してビルドのアプリケーションを Windows ストアの空のテンプレートを用いて空アプリにするためです。 テンプレートの作成と、既存の default.html ファイルを使用してページを定義するのに単純な HTML マークアップを使用できます。

<p>Tap the button below to choose an image to generate a thumbnail.</p>
<button id="pick">Pick Image</button>
<br/><br/>
<p>Thumbnail:</p>
<img id="thumbnail" src="images/logo.png" alt="Thumbnail"/>
<p>Source Image:</p>
<img id="sourceImage" src="images/logo.png" alt="Image"/>

次に、c# プロジェクトに通常どおり WinRT プロジェクト (ThumbnailLibrary) への参照を追加します。 プロジェクトをビルドして、新しく参照されたコンポーネントの IntelliSense を使用することができます。 ファイル選択ウィンドウを開くと、イメージを選択するのと同等の JavaScript を参照してくださいプロジェクトのソース コードを参照できます。 マネージ Windows ランタイム コンポーネントのインスタンスを作成し、サムネイルを生成を表示するには、以下の JavaScript を使用します。

var thumb = new ThumbnailLibrary.ThumbnailMaker();
thumb.generateThumbnailAsync(file).then(function (fileUrl) {
  var thumbImage = document.getElementById("thumbnail");
  thumbImage.src = fileUrl.rawUri;
  thumbImage.alt = thumbImage.src;
});

ご覧のとおり、API 呼び出しは c# プロジェクトで使用されるものとほぼ同じです。 投影自動的にメソッド シグネチャから pascal (JavaScript コードでの一般的な規則として、サムネイルを生成する呼び出しが小文字の文字で始まる)、キャメル ケースに変更、「約束」と呼ばれる特別なライブラリ [または実行ステートメントを使用して、コードの非同期の性質を処理するために使用されます。 MSDN デベロッパー センターのトピックを読んで約束についての詳細を学ぶことができる「クイック スタート。約束を使用して" bit.ly/OeWQCQ。 Windows のランタイム コンポーネントから渡された URL は、単にイメージの src 属性に直接設定されているので、イメージ タグ Url、ボックスの外をサポートします。

JavaScript コードでマネージ コンポーネントを使用する 1 つの重要な注意点は、同時に JavaScript およびマネージ コードをデバッグできないことです。 コンポーネントをデバッグする場合は、プロジェクトを右クリックし、[デバッグ] タブを選択し、マネージ コードを含むデバッグ オプションを選択する必要があります。 これを図 5 に示します。

Setting the Debug Options for a JavaScript Project
図 5 プロジェクトの JavaScript のデバッグ オプションの設定

C++ から消費します。

ネイティブ プロジェクトからのマネージ Windows ランタイム コンポーネントを消費することもできます。 CPlusPlusThumbnails プロジェクト CSharpThumbnails プロジェクトとして同じ XAML が C++ と c# の場合は、同じエンジンを共有します。 プロジェクトは、ネイティブの C++ 言語オプションを使用しますので、分離コードは異なっています。 C++ では、特別同時実行ライブラリを使用して非同期操作を処理します。 詳細については、このライブラリ MSDN デベロッパー センターのトピックは、「非同期プログラミングの C++、"読むことによって受講できます bit.ly/MUEqnR. 結果のコードは JavaScript バージョンで見たの約束に似ています。

ThumbnailMaker^ maker = ref new ThumbnailMaker();
create_task(maker->GenerateThumbnailAsync(file)).then([this](Uri^ uri)
{
  RandomAccessStreamReference^ thumbnailStream =
    RandomAccessStreamReference::CreateFromUri(uri);
  create_task(thumbnailStream->OpenReadAsync()).then([this](
    IRandomAccessStream^ imageStream) {
    auto image = ref new BitmapImage();
    image->SetSource((IRandomAccessStream^)imageStream);
    ThumbnailImage->Source = image;
  });
});

アプリケーションを実行すると、それが見えるし、c# バージョンの動作動作を見つけます。

コストを理解します。

Windows のランタイム マネージ言語を使用してコンポーネントを作成する強力な機能です。 しかし、この機能は、コストで付属して、内のプロジェクトを使用しているときのコストを理解することが重要です。 Windows ストアのアプリのネイティブ コードを使用してビルドを実行する CLR は必要ありません。 これらのアプリケーションは、Windows 8 環境で直接実行できます。 同様に、また JavaScript を使用して開発されたアプリケーションが CLR の依存関係は必要ありません。 彼らは、トライデントのレンダリング エンジンと HTML と CSS をレンダリングし、JavaScript コードを解釈する (同じインターネット エクスプ ローラー 10 ドライブ エンジン) チャクラ JavaScript エンジンに依存します。 Windows ストアのアプリの JavaScript で構築ネイティブ Windows ランタイム コンポーネントを直接呼び出すことがありますがマネージ Windows ランタイム コンポーネントを呼び出すとき、CLR への依存関係にかかります。

CLR の JIT コンパイラが初めてアクセスされたときマネージ Windows ランタイム コンポーネント用に記述されたコードがコンパイルされたジャスト ・ イン ・ タイム (JIT) になります。 これは、アクセスされたいくつかの最初の遅延時間があります。 NGen のハンドルは、デバイスがインストールされているモジュールをコンパイルすると呼ばれるプリコンパイルのサービス一日に一度インストールされて最終的にすべてのモジュールのパッケージをコンパイルするように利用できます。 CLR は、またガベージ コレクションを実行することによってメモリを管理します。 ガベージ コレクター (GC) ヒープは 3 つの世代分割し、パフォーマンスを最適化するためにデザインされたアルゴリズムを使用してヒープの部分のみを収集します。

作業を実行中、GC はあなたのアプリケーションを一時停止します。 これだけ多くの場合エンドユーザーにわかりやすいのではない、わずかな遅延を紹介し、強烈なガーベジ コレクション操作多くの場合、バック グラウンドで実行できます。 (数百 mb 以上のメモリ オブジェクトのコードのマネージ部分を参照するときは) 十分なヒープがある場合、ガベージ コレクションがアプリケーションの応答性の欠如を認識するユーザーのために十分な長さを一時停止します。

マネージ Windows ストア アプリケーションを構築しているときこれらの考慮事項のほとんどは、すでに場所でです。 C++ や java スクリプトの設定を構築 Windows ストア アプリケーションに追加するときマネージ コード新しい懸念事項が追加されます。 あなたのアプリに CPU が追加消費され、あなたの紹介をするときのメモリのマネージ コンポーネントを認識することが重要です。 (マネージ参照任意の顕著な影響なしに多くのアプリを取るが) 上のコンポーネントによって認識可能なパフォーマンスのヒット、かかる場合もあります。 利点は、あなた自身のメモリの管理について心配する必要はなく、レガシ コードとスキルを活用することができますもちろん、です。

マネージ プロジェクト用の代替

マネージ コード (c# または Visual Basic) を使用して Windows ストアのアプリを構築している場合は、同じ制限を持っていない Windows ランタイム コンポーネントを作成するいくつかの選択肢があります。 簡単な c# クラス ライブラリを使用して再利用可能なコンポーネントを簡単に作成できます。 クラス ライブラリは、Windows ストアのアプリを構築されている場合は、Windows ストア アプリケーションから、プロジェクトを参照できます。 クラス ライブラリの作成は、WinRT の種類のみを公開することや、ジェネリックなど、WinRT 型システムの一部ではない機能を使用することができないの制限も削除されます。

考慮する別の方法としては、ポータブル クラス ライブラリ (PCL) です。 これは特別な種類のさまざまなプラットフォームから再コンパイルせずに参照できるクラス ライブラリです。 あなたがコードの場合、このオプションは、他のプラットフォーム間を共有する使用 — Windows Presentation Foundation、Silverlight、Windows Phone など — と Windows ストアのアプリ。 詳細については、PCL 私の 3 部分のブログのシリーズ"理解のポータブル ライブラリで追いかけて ICommand、"読むことによって受講できます bit.ly/pclasslib

コンポーネントよりも多くのコードが含まれる場合は、拡張 SDK を作成することをお勧めします。 これは、特殊な形式の 1 つのアイテムとして Visual Studio 2012 が扱うことができる SDK です。 パッケージには、ソース コード、資産、ファイル Windows ランタイム コンポーネントを含むものバイナリが含まれます。 消費からコンポーネント Visual Studio 2012 内を使用しやすくデザイン時拡張機能を作成することもできます。 拡張 Sdk 彼らは自己完結型ではないので Windows ストアに掲示することはできませんアプリ。 MSDN ライブラリの記事を読んでの拡張 Sdk についての詳細を学ぶことができます"どのように。ソフトウェア開発キットで作成" bit.ly/L9Ognt

Windows マネージ ランタイム コンポーネントを作成する場合

ので、多くの可能な選択肢とそれが今まで Windows ランタイムのマネージ コードを使用してコンポーネントを作成する成しているか。 はい-しかし、次の質問を検討してください。 尋ねる最初の質問は、JavaScript や C++ を使用してネイティブ コードを使用して書かれた Windows ストア アプリケーションから参照するには、コンポーネントの必要かどうかです。 このケースではない場合は、クラス ライブラリとその他のオプションは、代わりに動作するときに Windows のランタイム コンポーネントを使用する理由はありません。 この場合、すべての利用可能な言語オプションから使用できるようにする Windows のランタイム コンポーネントを作成する必要があります。

次の質問は、C++ でコンポーネントを作成するか、マネージ コードを使用する必要がありますです。 マネージ コードを使用する理由の数です。 1 つの理由は、あなたのチームは、c# または C++ での Visual Basic よりももっと経験し、コンポーネントを構築する既存のスキルを活用できるかもしれない。 別の理由は、同じ言語の選択を保持する場合は、ポートに容易になるマネージ言語で記述された既存のアルゴリズムがあることかもしれない。 ネイティブ コードを使用する代わりにマネージ言語およびクラス ライブラリを使用して維持し、書くは簡単かもしれないいくつかのタスクがあり、マネージ言語での開発を行うチームがはるかに生産的になります。

この記事では、再利用可能な Windows のランタイムを使用してコンポーネントを作成することができることを学んだにラッピングは、c# および Visual Basic コード管理。 これらのコンポーネントすることができます簡単に参照、JavaScript や C++ など、任意の言語で書かれた Windows ストア アプリケーションから消費されます。 このオプションは Windows ランタイム コンポーネントとマネージ コードを使用することを選択の影響を作成するためのルールを理解することが重要ですが、お好みの言語を使用し、すべての Windows ストア アプリケーションで使用できるコンポーネントを作成する既存のコードを活用するユニークな機会を提供します。

Jeremy Likness  *アトランタの Wintellect LLC のプリンシパル コンサルタントです。 彼は 3 年間マイクロソフト Silverlight MVP と今後"建物 Windows 8 アプリケーションを c# と XAML"(Addison-wesley Professional、2012年) を含む、いくつかの本の著者です。 オンラインで学ぶ bit.ly/win8design と彼のブログに従ってください csharperimage.jeremylikness.com。   *

この記事のレビュー、次技術専門家のおかげで。Shawn Farkas、ジョン ・ ガーランド、Jeff Prosise レイラ ・ ドリスコール、Jeffrey Richter