30

下の画像から、Windows 8 プラットフォームとツール。これは、Metro スタイル アプリに C++、C#、または JavaScript を使用できることを意味します。いくつかのビルドの基調講演も見ていますが、ここでいくつか質問があります。

Windows 8 プラットフォームとツール http://www.windowsitpro.com/content/content/140554/windows8-platform-tools_2.jpg

  1. WinRT 上の C++、C#、および JavaScript に違いはありますか (パフォーマンス、機能、機能など)。
  2. JavaScript を使用してネイティブMetro アプリを作成するにはどうすればよいですか。MS の js ライブラリを使用する必要がありますか。それとも、jQuery などの使い慣れた js を使用できますか。
  3. Metro スタイル アプリでは、システム サービスは WinRT のみです。これは、低レベルの dll を使用できなくなったことを意味しますか? これにはパフォーマンス コストが伴いますか?
4

6 に答える 6

45

#1については、おおまかに次のようにラインナップします。

JavaScript-最高レベルの動的型付けされたGC。UIにはHTML5/CSSのみを使用でき、XAMLフレームワーク(Windows.UI.XAML名前空間)は使用できません。ローカルストレージやIndexedDBなど、WinRTの使用可能なサーフェスに加えて、いくつかの標準JS API(HTML5で指定)を提供します。動的に型付けされるため、CPUにバインドされた重い処理は、.NETまたはC ++よりも遅くなる可能性がありますが、JSエンジンは、JITコンパイルされ、高度に最適化されているため、依然として非常に高速です。C++および.NETWinRTコンポーネントを使用できますが、JSで独自のコンポーネントを作成することはできません。言語プロジェクションのいくつかの側面はそれに応じて制限されているようです。たとえば、私が見る限り、たとえばJSでWinRTインターフェイスを実装する方法はありません。既存のJSライブラリは、IE10で機能する限り、通常、労力をかけずに、または最小限の労力で再利用できます。

.NET(C#/ VB)-中間レベル、オプションの動的型付け(dynamicキーワードなど)とGCを使用して静的に型付けされます。XAML UIフレームワークはUIのデフォルトのフレームワークですが、コントロールを使用してHTMLを使用することもできますWebView。WinRTライブラリへのフルアクセスを提供しますが、それに加えて独自のライブラリもいくつかあり、使用する方が便利な場合があります(Streamvs IInputStream/IOutputStreamなど)。また、非同期操作の特別な言語レベルのサポートを含む唯一のもの(asyncおよびawaitキーワード)。非同期設計のため、WinRTAPIを使用するときに頻繁に使用されます。一般的に言えば、ほとんどのシンタックスシュガーを提供します-非同期のものを除いて、オブジェクトにLINQを取得します(これはWinRTコレクションで機能します)。独自のWinRTコンポーネントを記述して、JSまたはC ++/CXから使用できます。既存の.NETライブラリは、依存している.NET Frameworkのクラスに応じて、すぐに再利用できる場合とできない場合があります。SilverlightまたはWP7用に作成されたコンポーネントは、変更なしまたは最小限の変更で再利用できる可能性が最も高くなりますが、.NET4FullまたはClientProfile用に作成されたコンポーネントを実行するには大幅な変更が必要になる場合があります。

C ++ / CX(Visual C ++コンポーネント拡張)-低/中レベル、静的型付け、GCなし-参照のみ。オブジェクトモデルがWinRTに直接マッピングされるように設計されており、インピーダンスの不一致がないため、リカウントされますが、定型文を回避し、一般的に安全に使用できる高レベルです(たとえば、HRESULTではなく例外、文字列が表示されます)。ハンドルでdynamic_castはなくオブジェクトとしてQueryInterface等)。あなたとWinRTの間に追加のレイヤーやプロキシオブジェクトなどはありません。すべての呼び出しは直接です。ほとんどの場合、3つすべての中で最速ですが、正確な違いは特定のタスクによって大幅に異なり、一部の場合はごくわずかであり(たとえば、計算がないかほとんどないイベント駆動型アプリ)、他の場合はかなりの場合(たとえば、解析や重い計算)です。 )。UIストーリーは.NETの場合と同じです。さらに、ATLのサブセットだけでなく、C++標準ライブラリ全体を利用できます。独自のWinRTコンポーネントを記述して、JSまたは.NETから使用できます。既存のC++ライブラリは、使用するAPIに応じて、すぐに再利用できる場合とできない場合があります。標準C/C ++に厳密に依存するものは通常、変更なしで機能しますが、Win32 APIを呼び出すものは、Metroアプリコンテナで使用できないAPIに依存している場合に問題が発生する可能性があります。


#3に関しては、このビデオ(http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C)は、Win32(「低レベルDLL」の意味を推測します)の使用に関するほとんどの質問に答えるはずです。 )Metroアプリから。ビデオはC++に関するものですが、P /InvokeとCOMInteropがまだ存在するため、これはC#にも完全に適用されることに注意してください。したがって、C ++から呼び出すことができる場合は、C#から呼び出すことができます。

于 2011-09-19T05:11:51.943 に答える
3

1) 言語の選択を許可するポイントは、API にアクセスする唯一の方法であるという理由ではなく、言語の本質的な利点のために言語を選択できるようにすることです。動的言語が好きな場合は、JavaScript を選択してください。静的型付けは好きだが、メモリを扱いたくない場合は、C# を使用してください。最速の実行が必要な場合 (ただし、自分の足を撃つ能力が最も高い場合) は、C++ を選択してください。

2) それは、ネイティブの意味によって異なります。Metro スタイル アプリのように見せたいだけの場合は、開発者向けプレビュー SDK に同梱されている WinJS ライブラリを使用するのが最善の方法です。

3) WinRT を使用すると、JavaScript コードから独自の C++ DLL または C# アセンブリを作成して呼び出すことができます。制限は、DLL を WinRT オブジェクトとして公開する必要があることと、Metro スタイル アプリでの使用が許可されていない関数を呼び出すことができないことです。

于 2011-09-19T04:28:18.127 に答える
2
  1. 彼らがいつも持っていたのと同じ違い。自動メモリ管理なしのC#のようなものはありません。管理対象言語には、いつもと同様のオーバーヘッドがあります。

  2. Javascriptを実行している場合は、jQuery(純粋なjavascript)を使用できるはずです。初期化などのためにいくつかのMS関数を呼び出す必要があるかもしれませんが、既存のスクリプト関数は引き続き実行する必要があります。

  3. 私が見た中で最も信頼できる情報源は、(少なくともほとんどの場合)WinRTがWin32の上にあることを示しています。その「Windowsカーネルサービス」ブロックはWin32のものkernel32.dllです。一部の上位レベルのWin32のものはMetroで使用されていませんが、どのアプリケーションがWin32のすべてを使用したことがありますか?

于 2011-09-19T04:06:14.060 に答える
2

他の人が3つのオプションウェルの違いを説明しているので、繰り返しません。

しかし、私はそれが次のように行われると思います:

  • あなたが知っていることを選択してください
  • 最も多くのコードを再利用できるものを選択してください

それで

  • .netプログラマーの場合は、C#またはVB.Netを使用してください
  • Windows Phoneからアプリを移植する場合は、C#またはVB.NETを使用してください
  • 大きなC++コードベースがある場合は、WinRTでアンマネージC++を使用することを検討してください。
  • Webサイトがあり、そのオフラインバージョンを提供したい場合は、JavaScriptとHTMLを使用することで、優れたコード(およびスキル)を再利用できる可能性があります。
  • JavaScriptとHTMLは好きだが、.Netは好きではない場合は、…を使用してください。
于 2011-09-24T21:13:47.770 に答える
1

このビデオでは、JScript から独自の C++ コードを呼び出す方法を示します。

http://channel9.msdn.com/posts/Raman-Sharma-Building-Metro-Style-Apps-with-C-and-JavaScript

于 2011-09-26T00:16:36.767 に答える
0

提案:

  • 開発者プレビューをダウンロードして、自分で探してみませんか。

http://msdn.microsoft.com/en-us/windows/apps/br229516

事実:

  • もちろん、.Net と同じように、Win32 .dll を (あるレベルまたは別のレベルで) 使用することもできます。

  • Windows 8 が公式に発表されてから 1 年以上が経過しました。この時点で、最終リリースで具体的な「機能」と「機能」がどのようなものになるかを言う方法はありません。

于 2011-09-19T04:11:05.387 に答える