Outlook에서 보내기 단추를 누르는 경우 사용자가 메일 정보를 가져오고 값을 기반으로 일부 작업을 수행하려고합니다. 이이 작동ATL/COM C++ Outlook Addin에서 메일 항목에 액세스 할 수 없습니다.
public IDispEventSimpleImpl<1, CConnect, &__uuidof(Outlook::ItemEvents)>
public:
VOID WINAPI ItemSend(IDispatch * Item, bool Cancel);
BEGIN_SINK_MAP(CConnect)
SINK_ENTRY_INFO(1, __uuidof(Outlook::ItemEvents), 0x0000F002, ItemSend, &fiMailItemEvents)
END_SINK_MAP()
: 나는
DispEventAdvise((IDispatch*)m_Application, &__uuidof(Outlook::ApplicationEvents));
그것은이 같은 헤더 파일에 구현되어 호출 즉, OnConnection 이벤트 핸들러에서
VOID WINAPI CConnect::ItemSend(IDispatch * Item, bool Cancel)
: 그러므로 나는이 기능을 사용 그냥해야하지만, 함수 안에는 메일 항목을 얻으려고 항상 예외가 생깁니다. 다음은 항목에 액세스하기위한 코드입니다.
CComPtr<Outlook::_MailItem> mail;
Item->QueryInterface(IID__MailItem, (void**)&mail);
무엇이 잘못 되었나요? 미리 감사드립니다
'QueryInterface()'의'HRESULT' 반환 값은 무엇입니까? – Aurora
불행히도 응용 프로그램이 항상 '0xC000041D : 사용자 콜백 중에 처리되지 않은 예외가 발생했습니다'와 충돌하기 때문에 아무 것도 반환하지 않습니다. – Bautzi89
['QueryInterface()'] (https://msdn.microsoft.com/en-us) /library/windows/desktop/ms682521(v=vs.85).aspx)는 HRESULT를 반환하지만 값은 확인하지 않습니다. 'HRESULT hr = Item-> QueryInterface (IID__MailItem, (void **) &mail);')와 같이 코드를 편집하고 다음 줄에 중단 점을 넣어 'hr' 값을 확인하십시오. – Aurora