我在哪里可以找到Windows运行时的概念文档?

时间:2012-11-02 14:44:55

标签: windows-8 windows-runtime

我正在努力学习Windows Runtime,以便就我的雇主将现有应用程序移植到它所需的内容提出建议。我无法找到提供API工作原理的技术概述的文档。

我的所有网络搜索似乎都引导我API reference on MSDN,这简直到了不可读性的程度。它记录了API类和方法的正式签名,但似乎假设读者已经知道事物是如何组合在一起的。每个方法的目的通常被描述为一个简洁的句子片段,用空格而不是CamelCase重新声明它的名称,并且关于限制,期望和不变量的进一步解释超出了类型声明中明显的范围。完全没有。 (这与普通Win32 API参考文档中相当信息丰富的#34;备注和#34;部分形成对比。)

显然,我不应该使用此文档来初步了解API的工作原理。 我应该使用什么?

移动one level up in MSDN有一个部分具有有前途的名称​​概念和架构,还有一些更有前途的编程概念基础知识< / em> - 但他们实际描述的是一个看似随机选择的相当专业的主题,当然不是我需要理解的API参考。

我是否需要购买和阅读书籍形式的官方文件? MSDN以外的东西?我无法找到的秘密MSDN链接?

我已经看过this previous question并没有得到任何真正的答案,也许是因为它用5美元的单词表示相当不透明,比如&#34;本体&#34;。为了更好地解释我正在寻找的内容,以下是一些问题示例,我希望我所寻求的文档能够告诉我答案:

(请注意,这些只是示例。我的主要目标是找到一个能够回答这些和类似问题的规范,而不是获得这些具体示例的答案。)

  

Windows.Networking.Sockets.StreamSocket具有类型为InputStream的{​​{1}}属性,我明确应该使用该属性来读取套接字。但Windows.Storage.Streams.IInputStream的唯一方法是IInputStream,它读入ReadAsync,而IBuffer是一个只声明容量和大小属性的接口。如何获取正在读取的实际字节数?如果我自己实施IBuffer,系统将如何将它们传达给我?

     

经过几个小时的沮丧点击和谷歌搜索,我暂时断定界面是谎言 - IBuffer不是任何人都可以实现的,但IBuffer特别想要a ReadAsync(没有Windows.Storage.Streams.Buffer),无论其类型声明如何说明。然后我似乎可以使用I来读取DataReader中的实际字节。这真的是它应该如何去的吗?

  

嗯,看起来Buffer有一个带DataReader的构造函数,所以也许我可以删除IInputStream中间人。但是,这似乎是错误的,因为Buffer的{​​{1}}方法是同步,并且假设WinRT中的所有I / O都是异步的;肯定是DataReader声明的方法。那怎么办呢?

     

更令人沮丧的谷歌搜索和点击之后:哦,ReadBytes中的IInputStream方法确实......某事。根据MSDN,它&#34;从输入流&#34;加载数据,但使用它的惯例是什么?我应该在构造LoadAsync后立即调用它一次,还是可以多次调用它来重复使用相同的DataReader进行下一次读取操作? DataReader内部是否包含循环缓冲区?如果我尝试读取的字节数已超过异步读取的数量,会发生什么? DataReader方法的超级简洁文档没有提到例外或错误条件; DataReaderReadFoo

的课程文档也没有

  

显然,应用可以是多线程的,因为supported Win32 APIs包含DataReaderIDataReader等内容。但似乎不支持InterlockedCompareExchange和RTL EnterCriticalSection,并且在WinRT类层次结构中的任何地方都没有任何Java-ish CreateThread类。如何开始新线程?

  

谈到异步I / O ......我对异步I / O和完成延续的一般概念感到很满意,但WinRT中的精确规则是什么,比如说,完成例程的哪个线程是叫进来?如果它始终是同一个线程我从(我希望!)开始I / O操作,我是否需要确保它不时进入某种警报等待,所以系统有机会在那里打电话给我的代码?

  

维基百科声称​​&#34; WinRT本质上是一个基于COM的API,虽然依赖于增强的COM。&#34; 这究竟是什么&#34;增强&#34;?如果我遵循COM规则和惯例,我是否有可能被因为&#34;增强功能而不同的工作所困扰&#34;?或者,相反,由于增强功能,我能做些什么更容易吗?

  

关于异步回调如何工作的唯一描述使它看起来非常特定于实现语言 - 它在C#/ CLR,JavaScript和C ++ / CX之间看起来相当不同。 COM / ABI级别实际发生了什么?特别是,因为API文档似乎假设&#34; C ++&#34;意味着&#34; C ++ / CX&#34;,如果我使用WRL,异步I / O如何工作?或者只是_beginthreadexThread业务只是语言提供的糖而真实的 ABI始终是await等等。 ,如API参考中所述?但那是一种代表类型;那个甚至在COM方面有明确的含义吗?

2 个答案:

答案 0 :(得分:2)

我刚刚注意到MSDN上似乎有两个 parallel 页面层次结构描述了WinRT API:

这是我在问题中咆哮的几乎空洞的文件。但是,

中描述了一些API元素

稍微接近COM金属,偶尔包含有用的备注部分。例如,IBuffer的页面显示IBuffer的实现还必须实现IBufferByteAccess,它提供对实际字节的访问。

这不太理想(似乎仍然隐含着很多信息),但它至少是一些东西。

答案 1 :(得分:0)

我认为这篇文章可能是http://chat.stackoverflow.com/辩论,但不是问题。 WinRT Api和投影(c#/ xaml或html / js等)引用在他们的第一个版本中,从我的观点来看,它们只是一个基本参考,而不是一个非常简单的文档来源。

这通常与所有最近创建的技术一起开心,我认为你只需要等待几个月,文档将逐渐开始改进。