实现IMarshal接口,编译的时候报 “不能实例化抽象类 ”
好人吗 2014-02-11 04:33:29 代码如下:
class ATL_NO_VTABLE CMarshalTest :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMarshalTest, &CLSID_MarshalTest>,
public IDispatchImpl<IMarshalTest, &IID_IMarshalTest, &LIBID_TestMarshalLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IMarshal
{
public:
CMarshalTest()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MARSHALTEST)
BEGIN_COM_MAP(CMarshalTest)
COM_INTERFACE_ENTRY(IMarshalTest)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMarshal)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
//STDMETHOD(GetUnMarshalClass)(REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid);
// STDMETHOD(GetMarshalSizeMax)(REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize);
//STDMETHOD(MarshalInterface)(IStream *pStm, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags);
//STDMETHOD(UnmarshalInterface)(IStream *pStm, REFIID riid, void * *ppv);
//STDMETHOD(ReleaseMarshalData)(IStream *pStm);
//STDMETHOD(DisconnectObject)(DWORD dwReserved);
STDMETHODIMP CMarshalTest::Add(void)
{
// TODO: 在此添加实现代码
return S_OK;
}
STDMETHODIMP CMarshalTest::GetUnMarshalClass(REFIID riid, void *pv,
DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid)
{
return S_OK;
}
STDMETHODIMP CMarshalTest::GetMarshalSizeMax(REFIID riid, void *pv, DWORD dwDestContext,
void *pvDestContext, DWORD mshlflags, DWORD *pSize)
{
return S_OK;
}
STDMETHODIMP CMarshalTest::MarshalInterface(IStream *pStm, REFIID riid,
void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags)
{
return S_OK;
}
STDMETHODIMP CMarshalTest::UnmarshalInterface(IStream *pStm, REFIID riid,
void * *ppv)
{
return S_OK;
}
STDMETHODIMP CMarshalTest::ReleaseMarshalData(IStream *pStm)
{
return S_OK;
}
STDMETHODIMP CMarshalTest::DisconnectObject(DWORD dwReserved)
{
return S_OK;
}
};
我把IMarshal接口去掉后就不报错