私は、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
あります。これは、ソケットからの読み取りに使用することになっています。ただし、の唯一のメソッドは、IInputStream
をReadAsync
読み込んでIBuffer
、IBuffer
容量とサイズのプロパティのみを宣言するインターフェイスです。読み取られている実際のバイトを取得するにはどうすればよいですか?私が自分で実装した場合IBuffer
、システムはそれらをどのように私に提供しますか?何時間もイライラしたクリックとグーグルの後、私は暫定的にインターフェースは嘘であると結論付けました-
IBuffer
誰もが実装できるものではありませんが、その型宣言が何を言っていても、ReadAsync
具体的にはWindows.Storage.Streams.Buffer
(なしで)欲しいです。I
次に、DataReader
から実際のバイトを読み取るために使用できるようBuffer
です。それは本当にそれが行くことになっている方法ですか?
また
DataReader
うーん、コンストラクターがあるように見えるので、結局仲介者IInputStream
を切り取ることができるかもしれません。Buffer
ただし、これは間違っているようです。DataReader
たとえば、のメソッドReadBytes
は同期的であり、WinRTのすべてのI/Oは非同期であると考えられます。確かに1つの宣言されたメソッドはIInputStream
です。では、それはどのように機能しますか?もっとイライラしたグーグルとクリックの後:ああ、その中には...何かをする
LoadAsync
方法があります。DataReader
MSDNによると、「入力ストリームからデータをロードする」のですが、それを使用するための規則は何ですか?を作成した直後に1回だけ呼び出すことになっていますか、それとも次の読み取り操作でDataReader
同じものを再利用するために複数回呼び出すことができますか?内部に循環バッファが含まれてDataReader
いますか?DataReader
すでに非同期で読み取られているよりも多くのバイトを読み取ろうとするとどうなりますか?メソッドの非常に簡潔なドキュメントには、ReadFoo
例外やエラー条件は記載されていません。DataReader
またはのクラスドキュメントもありませんIDataReader
。
また
サポートされているWin32API
InterlockedCompareExchange
には、などが含まれているため、アプリはマルチスレッド化できるようです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リファレンスで説明されているように、
await
andthen
ビジネスが言語提供の砂糖であり、実際のABIが常になどの観点からある場合ですか?AsyncOperationWithProgressCompletedHandler
しかし、それはデリゲートタイプです。それはCOMに関して明確に定義された意味を持っていますか?