描述:
我有一个COM类,定义如下:
class ATL_NO_VTABLE Cr5 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<Cr5, &CLSID_r5>,
public IDispatchImpl<Ir5, &IID_Ir5, &LIBID_TEMP45Lib>
{
public:
Cr5()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_R5)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(Cr5)
COM_INTERFACE_ENTRY(Ir5)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// Ir5
public:
STDMETHOD(QueryNext)(/*[in,out]*/ LPUNKNOWN * lpTrunk);
};
还有另一个COM类:
class ATL_NO_VTABLE Cg6 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<Cg6, &CLSID_g6>,
public IDispatchImpl<Ig6, &IID_Ig6, &LIBID_TEMP45Lib>
{
public:
Cg6()
{
m_l=0;
}
DECLARE_REGISTRY_RESOURCEID(IDR_G6)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(Cg6)
COM_INTERFACE_ENTRY(Ig6)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// Ig6
public:
STDMETHOD(get_Voc_InterruptType)(/*[out, retval]*/ long *pVal);
protected:
long m_l;
};
我想在Cr5的QueryNext中定义一个新的。
STDMETHODIMP Cr5::QueryNext(LPUNKNOWN *lpTrunk)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
if(*lpTrunk==NULL)
{
Cg6 * pG6=new Cg6;
...
}
...
return S_OK;
}
编译时提示:error C2556: 'long __stdcall Cg6::AddRef(void)' : overloaded function differs only by return type from 'unsigned long __stdcall Cg6::AddRef(void)'这些错误。
请问怎么解决???
解决方案1:
CComObject为你的类提供了IUnknown的实现
你的Cg6并不是一个标准的com类