如何将 Outlook 2003 中的缓存 Exchange 模式功能与扩展 MAPI 应用程序配合使用

针对 Office 2003 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Office 2003 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

本文已归档。它按“原样”提供,并且不再更新。
简介
缓存 Exchange 模式是 Microsoft Office Outlook 2003 中的新功能。当 Outlook 2003 保持与 Microsoft Exchange 的用户邮箱的远程副本的联机连接时,缓存 Exchange 模式允许 Outlook 2003 使用用户邮箱的本地副本。对于扩展 MAPI 开发人员来说,了解此功能如何影响他们的解决方案以及他们如何使用此功能十分重要。
更多信息
如果 Outlook 2003 正在以缓存 Exchange 模式运行,则登录到同一个会话的任何扩展 MAPI 应用程序还将被连接到缓存邮件存储区。所访问的任何数据和所作的任何更改都将针对邮箱的本地副本进行。有时,您不希望出现这种情况。Outlook 2003 包括一个名为 MDB_ONLINE 的新标志:
#define MDB_ONLINE ((ULONG) 0x00000100)
此标志可以传递给 IMAPISession::OpenMsgStore MAPI 函数。此标志将重写与本地邮件存储区的连接并打开远程服务器上的存储区。

注意:此标志不允许将 Exchange 存储区在同一个 MAPI 会话中同时以缓存模式和非缓存模式打开。如果您已经打开了缓存邮件存储区,则必须关闭它才能使用此标志打开 Exchange 存储区,或者打开一个新的 MAPI 会话以便在此会话上使用此标志打开远程服务器上的 Exchange 存储区。

以下代码说明如何使用此标志:
    //Obtain the table of all the message stores that are available    hRes = lpMAPISession -> GetMsgStoresTable(0, &pStoresTbl);        //Set up restrictions for the default store    sres.rt = RES_PROPERTY;                                  //Comparing a property    sres.res.resProperty.relop = RELOP_EQ;                   //Testing equality    sres.res.resProperty.ulPropTag = PR_DEFAULT_STORE;       //Tag to compare    sres.res.resProperty.lpProp = &spv;                      //Prop tag and value to compare against        spv.ulPropTag = PR_DEFAULT_STORE;                        //Tag type    spv.Value.b   = TRUE;                                    //Tag value        //Convert the table to an array that can be stepped through    //Only one message store should have PR_DEFAULT_STORE set to true, so that only one will be returned    hRes = HrQueryAllRows(        pStoresTbl,                                          //Table to query        (LPSPropTagArray) &sptCols,                          //Which columns to obtain        &sres,                                               //Restriction to use        NULL,                                                //No sort order        0,                                                   //Max number of rows (0 means no limit)        &pRow);                                              //Array to return        //Open the first returned (default) message store    hRes = lpMAPISession->OpenMsgStore(        NULL,                                                //Window handle for dialogs        pRow->aRow[0].lpProps[EID].Value.bin.cb,             //size and...        (LPENTRYID)pRow->aRow[0].lpProps[EID].Value.bin.lpb, //value of entry to open        NULL,                                                //Use default interface (IMsgStore) to open store        MAPI_BEST_ACCESS | MDB_ONLINE,                       //Flags        &lpTempMDB);                                         //Pointer to put the store in
此外,您可以跳过特定项目或文件夹上的缓存,方法是将 MAPI_NO_CACHE 标志传递给 IMsgStore::OpenEntry MAPI 函数:
#define MAPI_NO_CACHE ((ULONG) 0x00000200)
以下代码说明如何使用此标志:
    // Open the root folder of the message store    hRes = lpMDB->OpenEntry(        0,                                                   // size of entry ID                                    NULL,                                                // Pointer to entry ID        NULL,                                                // Use default interface (IMAPIFolder)        MAPI_BEST_ACCESS | MAPI_NO_CACHE,                    // Flags        &ulObjType,                                          // Output parameter indicates the type of object that is returned        (LPUNKNOWN *)&lpRootFolder)))                        // Pointer to put the opened item in
注意:如果您使用 MDB_ONLINE 标志打开了邮件存储区,则不必使用 MAPI_NO_CACHE 标志。
属性

文章 ID:834496 - 上次审阅时间:01/12/2015 23:07:05 - 修订版本: 2.0

  • Microsoft Office Outlook 2003
  • kbnosurvey kbarchive kbinfo kbmsg kbprogramming kbsample KB834496
反馈