2012-05-22 2 views
0

J'utilise l'automatisation Outlook pour rechercher des éléments dans le calendrier. Pour cela j'utilise la méthode IsSearchSynchronous() pour voir si je dois attendre l'événement AdvancedSearchComplete. BTW, est-ce jamais synchrone ???IsSearchSynchronous échoue dans Outlook

Quoi qu'il en soit, si j'ai Outlook en cours d'exécution, je n'ai aucun problème avec cet appel. Mais si elle ne fonctionne pas - l'appel échoue avec

HRESULT: 0x80020009 Exception occurred 

Le EXCEPINFO contient:

Source: "Microsoft Outlook" 
Description: "The operation failed." 
scode: 0x80004005 

Toutes les suggestions? Voici mon cas de test:

#include <atlstr.h> 

int _tmain() 
{ 
    IDispatch* pApp; 
    HRESULT  hr; 
    CoInitialize(NULL); 
    CLSID clsid; 
    hr = CLSIDFromProgID(L"Outlook.Application", &clsid); 
    if(SUCCEEDED(hr)) 
    { 
     hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pApp); 
     if(SUCCEEDED(hr)) 
     { 
      // Get DISPID for "IsSearchSynchronous" 
      OLECHAR Name[] = {L"IsSearchSynchronous"}; 
      LPOLESTR lp = Name; 
      DISPID dispID; 
      hr = pApp->GetIDsOfNames(IID_NULL, &lp, 1, LOCALE_USER_DEFAULT, &dispID); 
      if(SUCCEEDED(hr)) 
      { 
       // The path name of the folders that the search will search through. 
       VARIANT path; 
       path.vt = VT_BSTR; 
       path.bstrVal = SysAllocString(L"'Calendar'"); 

       // Build DISPPARAMS 
       DISPPARAMS dp = { NULL, NULL, 0, 0 }; 
       dp.cArgs = 1; 
       dp.rgvarg = &path; 

       // get IsSearchSynchronous 
       VARIANT result; 
       VariantInit(&result); 
       EXCEPINFO ei = {0}; 
       hr = pApp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &dp, &result, &ei, NULL); 
       VARIANT_BOOL vbIsSearchSynchronous = result.boolVal; 
      } 
     } 
    } 
    CoUninitialize(); 
    return 0; 
} 

Répondre

0

Au cas où quelqu'un d'autre est intéressé, cela est résolu avec l'aide de Microsoft. Le paramètre "scope" d'un appel IsSearchSynchronous() doit être un chemin d'accès complet au dossier de calendrier, par exemple:

"\\Mailbox - <user_name>\\Calendar"