2

私は、Windowsランタイムについて十分に学び、既存のアプリケーションをWindowsランタイムに移植するために雇用主が何を必要とするかについて推奨するようにしています。APIの動作の技術的な概要を提供するドキュメントを見つけるのに問題があります。

私のすべてのWeb検索は、MSDNのAPIリファレンスにつながるようですが、これは読みにくいほど簡潔です。APIクラスとメソッドの正式な署名を文書化していますが、読者は物事がどのように組み合わされているかをすでに知っていると想定しているようです。各メソッドの目的は通常、キャメルケースの代わりにスペースで名前を言い換える簡潔な文の断片として説明され、型宣言で明らかなものを超えた制限、期待、および不変条件に関する詳細な説明はほとんどありません。(これは、通常のWin32 APIのリファレンスドキュメントのかなり有益な「備考」セクションとは対照的です)。

明らかに、APIがどのように機能するかの最初の概要を作成するためにこのドキュメントを使用することは想定されていません。何を使うの

MSDNの1つ上のレベルに移動すると、有望な名前の概念とアーキテクチャ、およびさらに有望なプログラミングの概念基礎のセクションがありますが、実際に説明されているのは、かなり専門的なトピックのランダムな選択であり、確かに私はAPIリファレンスを理解する必要があります。

購入して読む必要のある本の形の公式文書はありますか?MSDN以外の何か?私が見つけられなかった秘密のMSDNリンク?

おそらく「オントロジー」のような5ドルの単語でかなり不透明に表現されていたためか、実際の答えが得られなかったこの前の質問を見ました。私が探しているものをよりよく説明するために、ここに私が探しているドキュメントが私に答えを教えてくれることを願っている質問のいくつかの例があります:

(これらは単なる例であることに注意してください。私の主な目標は、これらの特定の例に対する回答を取得するのではなく、これらおよび同様の質問に回答する仕様を見つけることです。)

Windows.Networking.Sockets.StreamSocketタイプのInputStreamプロパティがWindows.Storage.Streams.IInputStreamあります。これは、ソケットからの読み取りに使用することになっています。ただし、の唯一のメソッドは、IInputStreamReadAsync読み込んでIBufferIBuffer容量とサイズのプロパティのみを宣言するインターフェイスです。読み取られている実際のバイトを取得するにはどうすればよいですか?私が自分で実装した場合IBuffer、システムはそれらをどのように私に提供しますか?

何時間もイライラしたクリックとグーグルの後、私は暫定的にインターフェースは嘘であると結論付けました-IBuffer誰もが実装できるものではありませんが、その型宣言が何を言っていても、ReadAsync具体的にはWindows.Storage.Streams.Buffer(なしで)欲しいです。I次に、DataReaderから実際のバイトを読み取るために使用できるようBufferです。それは本当にそれが行くことになっている方法ですか?

また

DataReaderうーん、コンストラクターがあるように見えるので、結局仲介者IInputStreamを切り取ることができるかもしれません。Bufferただし、これは間違っているようです。DataReaderたとえば、のメソッドReadBytes同期的であり、WinRTのすべてのI/Oは非同期であると考えられます。確かに1つの宣言されたメソッドはIInputStreamです。では、それはどのように機能しますか?

もっとイライラしたグーグルとクリックの後:ああ、その中には...何かをするLoadAsync方法があります。DataReaderMSDNによると、「入力ストリームからデータをロードする」のですが、それを使用するための規則は何ですか?を作成した直後に1回だけ呼び出すことになっていますか、それとも次の読み取り操作でDataReader同じものを再利用するために複数回呼び出すことができますか?内部に循環バッファが含まれてDataReaderいますか?DataReaderすでに非同期で読み取られているよりも多くのバイトを読み取ろうとするとどうなりますか?メソッドの非常に簡潔なドキュメントには、ReadFoo例外やエラー条件は記載されていません。DataReaderまたはのクラスドキュメントもありませんIDataReader

また

サポートされているWin32APIInterlockedCompareExchangeには、などが含まれているため、アプリはマルチスレッド化できるようですEnterCriticalSection。ただしCreateThread、RTL_beginthreadexもサポートされていないようThreadであり、WinRTクラス階層のどこにもJava風のクラスはないようです。新しいスレッドを開始するにはどうすればよいですか?

また

非同期I/Oについて言えば...非同期I/Oと完了継続の一般的な考え方には非常に満足していますが、たとえば、完了ルーチンが呼び出されるスレッドに関するWinRTの正確なルールは何ですか?それが常にI/O操作を開始したのと同じスレッドである場合(私は願っています!)、システムがそこで私のコードを呼び出す機会があるように、それが何らかの警告可能な待機に入るのを確認する必要がありますか? ?

また

ウィキペディアは、 「WinRTは基本的にCOMベースのAPIですが、拡張COMに依存しています」と主張しています。この「強化」とは正確には何ですか?COMの規則や規則に従っている場合、「拡張機能」のために動作が異なるものに噛まれるリスクはありますか?または、逆に、機能強化によって簡単にできることはありますか?

また

非同期コールバックがどのように機能するかについての唯一の説明は、それらが実装言語に非常に固有であるように見えます-それはC#/ CLR、JavaScript、およびC ++/CXの間でかなり異なって見えます。ここでCOM/ABIレベルで実際に何が起こっているのですか?特に、APIドキュメントでは「C++」は「C++ / CX」を意味すると想定されているようですが、代わりにWRLを使用すると、非同期I / Oはどのように機能しますか?それとも、APIリファレンスで説明されているように、 awaitandthenビジネスが言語提供の砂糖であり、実際のABIが常になどの観点からある場合ですか?AsyncOperationWithProgressCompletedHandlerしかし、それはデリゲートタイプです。それはCOMに関して明確に定義された意味を持っていますか?

4

2 に答える 2

2

WinRT API を説明する MSDNに 2 つの並列ページ階層があるように見えることに気付きました。

これは、私が質問で怒鳴っているほとんど空虚なドキュメントです。ただし、一部の API 要素について

これは、COM メタルにやや近く、便利な備考セクションが含まれている場合があります。たとえば、IBuffer のページでは、IBufferの実装では、実際のバイトへのアクセスを提供するIBufferByteAccessも実装する必要があることがわかります。

それは理想的ではありません (そして、まだ多くの情報が暗黙のうちに残されているようです) が、少なくとも何とかなります。

于 2012-11-05T20:52:04.090 に答える
0

この投稿はhttps://chat.stackoverflow.com/の議論になる可能性があると思いますが、質問ではありません。WinRT Apiおよびプロジェクション(c#/xamlまたはhtml/ jsなど)の参照は最初のリリースにあり、現時点での私の観点からは、これらは単なる基本的な参照であり、広範なドキュメントソースではありません。

これは通常、最近作成されたすべてのテクノロジーで発生します。数か月待つだけで、ドキュメントが徐々に改善され始めると思います。

于 2012-11-06T13:20:38.800 に答える