2014-02-19 40 views
0

當我嘗試處理傳入的電子郵件(如果NewMailEx方法),如果我調用GetItemFromId方法(訪問衝突),則會收到異常。 Namespace.GetItemFromId方法是否需要storeId作爲第二個參數?如果我對提交事件的收件箱不感興趣,我應該提供什麼樣的價值作爲商店ID。換句話說,我只想收回有關收到的電子郵件的信息,無論它屬於哪個帳戶(收件箱)。Namespace.GetItemFromId異常

CMailItem m_mailItem = NULL; 
CApplication l_application; 
l_application.CreateDispatch("Outlook.Application"); 
CNameSpace l_namespace = l_application.GetNamespace(_T("MAPI")); 
CString ItemId((pDispParams->rgvarg)->bstrVal); 
m_mailItem = l_namespace.GetItemFromID(ItemId, /*whatIdToProvide*/??); 

我試圖傳遞一個emty值,但這不起作用。

這裏是GetItemFromId定義(自動生成的)

LPDISPATCH GetItemFromID(LPCTSTR EntryIDItem, const VARIANT& EntryIDStore) 
{ 
     LPDISPATCH result; 
    static BYTE parms[] = VTS_BSTR VTS_VARIANT; 
    InvokeHelper(0x2109, DISPATCH_METHOD, VT_DISPATCH, (void*)&result, parms,EntryIDItem, &EntryIDStore); 
    return result; 
} 

回答

1

對於所有可選參數,則需要傳遞類型VT_ERROR的變體與DISP_E_PARAMNOTFOUND的值。

+0

感謝您的回答@Dmitry,現在更多地拋出了excepion。現在我怎樣才能檢查收到的項目是否是一個mailItem? – Kira

+0

您可以爲IMailItem接口顯式地使用QueryInterface()。或者使用IDIspatch :: GetIDsOfNames/Invoke讀取Class屬性。 –