我正在努力学习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
特别想要aReadAsync
(没有Windows.Storage.Streams.Buffer
),无论其类型声明如何说明。然后我似乎可以使用I
来读取DataReader
中的实际字节。这真的是它应该如何去的吗?
或
嗯,看起来
Buffer
有一个带DataReader
的构造函数,所以也许我可以删除IInputStream
中间人。但是,这似乎是错误的,因为Buffer
的{{1}}方法是同步,并且假设WinRT中的所有I / O都是异步的;肯定是DataReader
声明的方法。那怎么办呢?更令人沮丧的谷歌搜索和点击之后:哦,
的课程文档也没有ReadBytes
中的IInputStream
方法确实......某事。根据MSDN,它&#34;从输入流&#34;加载数据,但使用它的惯例是什么?我应该在构造LoadAsync
后立即调用它一次,还是可以多次调用它来重复使用相同的DataReader
进行下一次读取操作?DataReader
内部是否包含循环缓冲区?如果我尝试读取的字节数已超过异步读取的数量,会发生什么?DataReader
方法的超级简洁文档没有提到例外或错误条件;DataReader
或ReadFoo
。
或
显然,应用可以是多线程的,因为supported Win32 APIs包含
DataReader
,IDataReader
等内容。但似乎不支持InterlockedCompareExchange
和RTLEnterCriticalSection
,并且在WinRT类层次结构中的任何地方都没有任何Java-ishCreateThread
类。如何开始新线程?
或
谈到异步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如何工作?或者只是
_beginthreadex
和Thread
业务只是语言提供的糖而真实的 ABI始终是await
等等。 ,如API参考中所述?但那是一种代表类型;那个甚至在COM方面有明确的含义吗?
答案 0 :(得分:2)
我刚刚注意到MSDN上似乎有两个 parallel 页面层次结构描述了WinRT API:
这是我在问题中咆哮的几乎空洞的文件。但是,
中描述了一些API元素稍微接近COM金属,偶尔包含有用的备注部分。例如,IBuffer的页面显示IBuffer的实现还必须实现IBufferByteAccess,它提供对实际字节的访问。
这不太理想(似乎仍然隐含着很多信息),但它至少是一些东西。
答案 1 :(得分:0)
我认为这篇文章可能是http://chat.stackoverflow.com/辩论,但不是问题。 WinRT Api和投影(c#/ xaml或html / js等)引用在他们的第一个版本中,从我的观点来看,它们只是一个基本参考,而不是一个非常简单的文档来源。
这通常与所有最近创建的技术一起开心,我认为你只需要等待几个月,文档将逐渐开始改进。