2011-06-23 24 views
2

请多多包涵访问时,我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,但我知道它实际上更多。

我想知道,是否可能有一些开关,我应该设置,以表明我想要关于这种错误的反馈?

或者还有什么我误解了吗?

谢谢。

回答

5

MAPI表会截断大字符串属性。大的二进制属性根本不返回。 在您读取属性值之前,您是否检查该类型是否仍然是PT_BINARY?还是它变成了PT_ERROR? 要打开较大的二进制属性,需要打开相应的IMessage并以IStream(IMessage :: OpenProperty)的形式打开属性。

+0

嗨德米特里,非常感谢你。我会研究它,明天再回到你身边。 (我不认为你有链接到实现你所建议的一些示例C++代码的链接).BTW,你的OutlookSpy是非常宝贵的,我们很久以前使用你的Redemption产品,但后来切换到当前的本地C++解。 – RenniePet

+0

再次嗨。对不起,我已经跑进了一堵砖墙。请参阅编辑我的问题。 (这些注释太有限制。) – RenniePet

+0

ulPropTag的高两个字节将保持不变,但较低的两个字节(类型)将是PT_ERROR。例如。 0x81230102将变为0x8123000A。 –

1

我会考虑查看Stephen Griffin的http://mfcmapi.codeplex.com/,其中包含完整的源代码 - 您可以使用mfcmapi应用程序查看所需的pst/folder/message /属性,然后查看代码以查看所需的MAPI调用。

+0

谢谢。我对这个计划很熟悉。现在是三年后,我甚至不记得我是否找到了解决问题的办法,而且它已不再相关。但再次感谢您的帮助。 – RenniePet