Re: Default Implementation for IUnknown
I second Igor's suggestion about IDispEvent[Simple]Impl.
Just to answer your question, you need to wrap your object
in CComObject<> or one of its siblings to get an IUnkown
implementation:
CComObject<DOMEventHandler>* pObj = NULL;
HRESULT hr = CComObject<DOMEventHandler>::CreateInstance(&pObj);
pObj->GetUnknown()->AddRef();
// Use it here
pObj->GetUnknown()->Release();
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
"Stefan Weber" <stefan.weber@gmail.com> wrote in message
news:1178209256.630883.326020@e65g2000hsc.googlegroups.com...
Hi,
I'm trying to implement an IDispatch object that I can use as an event
handler in a COM object (i.e. a browser helper object). It looks like
that:
--
#include "oaidl.h"
class DOMEventHandler :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatch
{
public:
DOMEventHandler(void) {}
virtual ~DOMEventHandler(void) {}
BEGIN_COM_MAP(DOMEventHandler)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IDispatch
virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS * pDispParams,
VARIANT *pVarResult,
EXCEPINFO * pExcepInfo,
UINT * puArgErr);
HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
HRESULT STDMETHODCALLTYPE IDispatch::GetTypeInfo(UINT iTInfo,
LCID lcid,
ITypeInfo **ppTInfo);
HRESULT STDMETHODCALLTYPE IDispatch::GetIDsOfNames(REFIID riid,
LPOLESTR *rgszNames,
UINT cNames,
LCID lcid,
DISPID *rgDispId);
};
--
Now when I want to instantiat this class, I get the error that QI,
AddRef and Release are abstract. First, I thought that
CComObjectRootEx provides a default implementation for these methods.
Looking closer, I realized that it actually doesn't: It implements
methods related with reference counting but with different names. This
leads me to the first question: What is CComObjectRootEx used for?
Anyway, given the fact that CComObjectRootEx does not implement the
IUnknown methods, I techically understand the compiler error. But I
did things exactly as described in a MSND tutorial (http://
msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/
cols/dnexpie/expie_hello_bho.asp). In this case, everything works
fine. In fact, I used the tutorial and for the BHO's main class
(called CHelloWorldBHO in the example), it works fine. However, as
soon as I create another class (as described above), I get the
problem.
Anybody has an idea what I my error is?
Thanks,
Stefan