2011-06-23 28 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