请多多包涵访问时,我MAPI知识是最小的,我的C++技能简陋......MAPI属性被截断使用QueryRows
我有一个程序,使用MAPI从Exchange服务器读取所有可能的日历约会。除了一种奇怪的情况之外,情况正常。
如果定期约会有大量异常,那么看起来好像我从MAPI获取的RecurrenceState属性已被截断为1200字节。我可以在OutlookSpy中看到实际上有1400个字节。 (奇怪的巧合,两个数字都是100的倍数?)
通过为10个特定属性(其中之一是RecurrenceState)设置称为SizedSPropTagArray的东西,然后执行QueryRows操作来访问约会。当我访问该属性的Value.bin.cb字段时,它通常是正确的,但对于此特定属性,当它应该是1400时显然包含1200.
希望有人有一个建议 - TIA。
编辑:“?在您阅读的属性值,你检查的类型仍然是PT_BINARY或者是否得到改变PT_ERROR”
德米特里,你说
我看不到我该怎么做。我正在做一个QueryRows,以便一次达到100个约会。然后我循环遍历LPSRowSet来处理查询的结果,即最多100个SRow对象。因此,为了处理RecurrenceState,我使用了sRow.lpProps [columnIndex],它提供了一个SPropValue。现在,这里似乎没有任何指示返回属性的类型。 .ulPropTag字段正确包含RecurrenceState属性的ID,而.Value.bin.cb提供的长度通常是正确的,但是当数据非常长时,它的值较低。我应该测试什么来查看您描述的错误是否已经发生?谢谢。
编辑2:
德米特里,我真的很感谢你们的帮助,我相信你的基本思想必须是正确的。但不幸的是,当它发生时,我没有得到任何测试错误情况的地方。
我现在已经能够在我们自己的Exchange服务器上重现这种情况,唯一的区别是对于我们的Exchange服务器,RecurrenceState数据的限制显然是510字节,而不是我们客户安装时看到的1200字节。
以下是在Visual Studio调试器下运行时,程序中数据的复制粘贴捕获。
sRow.lpProps[recurrenceInfoIndex].ulPropTag = 0x818b0102
sRow.lpProps[recurrenceInfoIndex].Value = {i=0x01da l=0x000001da ul=0x000001da ...}
下是有这么多的例外任命的RecurrenceState数据被截断:
sRow.lpProps[recurrenceInfoIndex].ulPropTag = 0x818b0102
sRow.lpProps[recurrenceInfoIndex].Value = {i=0x01fe l=0x000001fe ul=0x000001fe ...}
注意,从一个正常的定期约会,其异常数据不被截断第一。 ulPropTag与OK约定相同,数据长度为0x1fe = 510,但我知道它实际上更多。
我想知道,是否可能有一些开关,我应该设置,以表明我想要关于这种错误的反馈?
或者还有什么我误解了吗?
谢谢。
嗨德米特里,非常感谢你。我会研究它,明天再回到你身边。 (我不认为你有链接到实现你所建议的一些示例C++代码的链接).BTW,你的OutlookSpy是非常宝贵的,我们很久以前使用你的Redemption产品,但后来切换到当前的本地C++解。 – RenniePet
再次嗨。对不起,我已经跑进了一堵砖墙。请参阅编辑我的问题。 (这些注释太有限制。) – RenniePet
ulPropTag的高两个字节将保持不变,但较低的两个字节(类型)将是PT_ERROR。例如。 0x81230102将变为0x8123000A。 –