E
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öglich
Mein 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