2012-05-22 4 views
0

Outlook 자동화를 사용하여 일정 항목을 찾습니다. 이를 위해 IsSearchSynchronous() 메서드를 사용하여 AdvancedSearchComplete 이벤트를 기다려야하는지 확인합니다. BTW, 그것은 항상 동기식입니까 ???Outlook에서 IsSearchSynchronous가 실패 함

어쨌든 Outlook을 실행 중이면이 호출에 문제가 없습니다.

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

어떤 제안이 : -하지만이 실행되지 않을 경우 전화는 EXCEPINFO 포함

HRESULT: 0x80020009 Exception occurred 

실패? 경우 다른 사람에

#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; 
} 

답변

0

이는 Microsoft의 도움으로 해결, 관심 : 여기 내 테스트 케이스이다. IsSearchSynchronous() 호출에 대한 "범위"매개 변수는 다음과 같이 일정 폴더의 전체 경로 여야합니다.

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