gpt4 book ai didi

使用 QueryRows 访问时 MAPI 属性被截断

转载 作者:行者123 更新时间:2023-12-01 06:51:32 27 4
gpt4 key购买 nike

请耐心等待,我的 MAPI 知识很少,我的 C++ 技能也很初级......

我有一个程序,可以使用 MAPI 从 Exchange 服务器读取所有可能的日历约会。除了一种奇怪的情况外,一切都进展顺利。

如果定期约会有大量异常,那么我从 MAPI 获取的 RecurrenceState 属性似乎已被截断为 1200 字节。我可以在 OutlookSpy 中看到实际上有 1400 字节。 (奇怪的巧合,两个数字都是 100 的倍数?)

通过为 10 个特定属性(其中之一是 RecurrenceState)设置名为 SizedSPropTagArray 的东西,然后执行 QueryRows 操作来访问约会。当我访问该属性的 Value.bin.cb 字段时,它通常是正确的,但显然该特定属性包含 1200,而实际上它应该是 1400。

希望有人提出建议 - TIA。

编辑:

Dmitry,你说“在读取属性值之前,你是否检查类型是否仍然是 PT_BINARY?或者是否更改为 PT_ERROR?”

我不知道该怎么做。我正在执行 QueryRows 来一次最多获取 100 个约会。然后我循环遍历 LPSRowSet 来处理查询结果,即最多 100 个 SRow 对象。因此,为了处理 RecurrenceState,我使用 sRow.lpProps[columnIndex],它提供了一个 SPropValue。现在,这里似乎没有任何内容表明返回属性的类型。 .ulPropTag 字段正确包含 RecurrenceState 属性的 id,并且 .Value.bin.cb 提供长度,通常是正确的,但当数据很长时,它是一个较低的值。我应该测试什么来查看是否发生了您所描述的错误?谢谢。

编辑2:

Dmitry,我真的很感谢你的帮助,我相信你的基本想法一定是正确的。但不幸的是,当错误发生时,我没有对错误情况进行测试。

我现在已经能够在我们自己的 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,尽管我知道它实际上更多。

我想知道,我是否应该设置一些开关来表明我想要有关此类错误的反馈?

或者我还有其他误解吗?

谢谢。

最佳答案

MAPI 表会截断大字符串属性。根本不返回大型二进制属性。在读取属性值之前,是否检查类型是否仍然是 PT_BINARY?或者它会更改为 PT_ERROR 吗?要打开大型二进制属性,需要打开相应的 IMessage,并将属性打开为 IStream (IMessage::OpenProperty)。

关于使用 QueryRows 访问时 MAPI 属性被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com