Outlook Events abfangen
-
Hallo!
Ich habe bereits einen Beitrag (Addons für Outlook entwickeln) geschrieben. Bin auch soweit gekommen, dass ich einen Button in die Outlook-Leiste eingebunden habe.
Wie kann ich jetzt auf Outlook-Events wie z.B. "Neue Email" reagieren?
Ich bekomme folgenden Fehler, wenn ich nachfolgenden Code ausführe:
[C++ Fehler] atlcom.h(4009): E2034 Konvertierung von 'CComPtr<ITypeInfo>' nach 'CComQIPtr<ITypeInfo2,&IID_ITypeInfo2>' nicht möglich [C++ Fehler] atlcom.h(4009): E2034 Konvertierung von 'CComPtr<ITypeInfo>' nach 'CComQIPtr<ITypeInfo2,&IID_ITypeInfo2>' nicht möglichMein Code sieht wie folgt aus:
// ADDINIMPL.H : Deklaration von TAddInImpl #ifndef AddInImplH #define AddInImplH #define ATL_APARTMENT_THREADED #include "OutlookBouncer_TLB.H" #include "AddInDesignerObjects_TLB.h" #include "outlook_2k_srvr.h" #include "outlook_2k.h" #include "office_2k.h" #include <Registry.hpp> #include "comutil.h" class TAddInImpl; #define ID_App 1 #define ID_Explorer 100 typedef IDispEventImpl<ID_App, TAddInImpl, &DIID_ApplicationEvents, &LIBID_Outlook, 9, 0> AppEvents; typedef IDispEventImpl<ID_Explorer, TAddInImpl, &DIID_ExplorerEvents, &LIBID_Outlook, 9, 0> ExpEvents; ///////////////////////////////////////////////////////////////////////////// // TAddInImpl Implementiert IAddIn, die Standard-Schnittstelle von AddIn // und IAddIn-Ereignisse, die Standard-Quellschnittstelle // Threading-Modell : Apartment // Duale Schnittstelle: TRUE // Ereignisunterstützung : TRUE // Standard-Programm-ID : OutlookBouncer.AddIn // Beschreibung : Bounce Add-In for Outlook ///////////////////////////////////////////////////////////////////////////// class ATL_NO_VTABLE TAddInImpl : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<TAddInImpl, &CLSID_AddIn>, public IConnectionPointContainerImpl<TAddInImpl>, public TEvents_AddIn<TAddInImpl>, public IDispatchImpl<IAddIn, &IID_IAddIn, &LIBID_OutlookBouncer>, public IDispatchImpl<_IDTExtensibility2, &IID__IDTExtensibility2, &LIBID_AddInDesignerObjects>, public AppEvents, public ExpEvents { public: TAddInImpl() { this->AddInName = "OutlookBouncer"; } // Bei der Registrierung des Objekts verwendete Daten // DECLARE_THREADING_MODEL(otApartment); DECLARE_PROGID("OutlookBouncer.AddIn"); DECLARE_DESCRIPTION("Bounce Add-In for Outlook"); // Funktion wurde zum Aus- und Eintragen des Objekts aufgerufen // static HRESULT WINAPI UpdateRegistry(BOOL bRegister) { TRegistry *reg = new TRegistry; try { reg->RootKey = HKEY_CURRENT_USER; if (bRegister && reg->OpenKey("Software\\Microsoft\\Office\\Outlook\\Addins\\"+(AnsiString)TAddInImpl::GetProgID(), true)) { reg->WriteString("FriendlyName", TAddInImpl::GetDescription()); reg->WriteInteger("LoadBehavior", 3); reg->CloseKey(); } else if (!bRegister && reg->KeyExists("Software\\Microsoft\\Office\\Outlook\\Addins\\"+(AnsiString)TAddInImpl::GetProgID())) { reg->DeleteKey("Software\\Microsoft\\Office\\Outlook\\Addins\\"+(AnsiString)TAddInImpl::GetProgID()); } } __finally { delete reg; } TTypedComServerRegistrarT<TAddInImpl> regObj(GetObjectCLSID(), GetProgID(), GetDescription()); return regObj.UpdateRegistry(bRegister); } BEGIN_COM_MAP(TAddInImpl) COM_INTERFACE_ENTRY(IAddIn) COM_INTERFACE_ENTRY2(IDispatch, IAddIn) COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer) COM_INTERFACE_ENTRY(_IDTExtensibility2) END_COM_MAP() BEGIN_CONNECTION_POINT_MAP(TAddInImpl) CONNECTION_POINT_ENTRY(DIID_IAddInEvents) END_CONNECTION_POINT_MAP() BEGIN_SINK_MAP(TAddInImpl) SINK_ENTRY_EX(ID_Explorer, DIID_ExplorerEvents, 0x0000f008, OnExplorerClose) SINK_ENTRY_EX(ID_App, DIID_ApplicationEvents, 0x0000f003, OnNewMail) END_SINK_MAP() // IAddIn public: HRESULT STDMETHODCALLTYPE OnConnection(LPDISPATCH Application, Addindesignerobjects_tlb::ext_ConnectMode ConnectMode, LPDISPATCH AddInInst, LPSAFEARRAY* custom); HRESULT STDMETHODCALLTYPE OnDisconnection(Addindesignerobjects_tlb::ext_DisconnectMode RemoveMode, LPSAFEARRAY* custom); HRESULT STDMETHODCALLTYPE OnAddInsUpdate(LPSAFEARRAY* custom); HRESULT STDMETHODCALLTYPE OnStartupComplete(LPSAFEARRAY* custom); HRESULT STDMETHODCALLTYPE OnBeginShutdown(LPSAFEARRAY* custom); void _stdcall OnNewMail(); void _stdcall OnExplorerClose(); private: CComVariant AddInName; CComPtr<Outlook_2k::_Application>pOutlookApplication; CComPtr<Office_2k::CommandBar>pCommandBar; CComPtr<Office_2k::_CommandBarButton>pOutlookBounceButton; void AddCommandBar(); }; #endif //AddInImplH