Добавить интерфейс
Добавлено: 18 окт 2005, 17:04
Я делаю ATL проек (не атрибутированный), добавляе Simple Object:
Мне надо добавить интерфейс IOleCommandTarget, в книжке написанно что достаточно добавить его в наследуемые и в карту — я это делаю:
в .h файле
в .cpp
В результате ошибка:
В чем дело?
Код: Выделить всё
class ATL_NO_VTABLE CMyIePlag :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CMyIePlag, &CLSID_MyIePlag>,
public IObjectWithSiteImpl<CMyIePlag>,
public IDispatchImpl<IMyIePlag, &IID_IMyIePlag, &LIBID_IEELib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
{
public:
CMyIePlag()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYIEPLAG)
BEGIN_COM_MAP(CMyIePlag)
COM_INTERFACE_ENTRY(IMyIePlag)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IObjectWithSite)
END_COM_MAP()
Мне надо добавить интерфейс IOleCommandTarget, в книжке написанно что достаточно добавить его в наследуемые и в карту — я это делаю:
в .h файле
Код: Выделить всё
class ATL_NO_VTABLE CMyIePlag :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CMyIePlag, &CLSID_MyIePlag>,
public IObjectWithSiteImpl<CMyIePlag>,
public IDispatchImpl<IMyIePlag, &IID_IMyIePlag, &LIBID_IEELib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IOleCommandTarget
{
public:
CMyIePlag()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYIEPLAG)
BEGIN_COM_MAP(CMyIePlag)
COM_INTERFACE_ENTRY(IMyIePlag)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IObjectWithSite)
COM_INTERFACE_ENTRY(IOleCommandTarget)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
STDMETHOD (QueryStatus)(
GUID *pguidCmdGroup,
ULONG cCmds,
OLECMD *prgCmds,
OLECMDTEXT *pCmdText);
STDMETHOD (Exec)(
GUID *pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdExecOpt,
VARIANTARG *pvaIn,
VARIANTARG *pvaOut);
Код: Выделить всё
STDMETHODIMP CMyIePlag::QueryStatus( GUID *pguidCmdGroup,
ULONG cCmds,
OLECMD *prgCmds,
OLECMDTEXT *pCmdText)
{
return S_OK;
}
STDMETHODIMP CMyIePlag::Exec(GUID *pguidCmdGroup, DWORD nCmdID,
DWORD nCmdExecOpt,
VARIANTARG *pvaIn,
VARIANTARG *pvaOut)
{
return S_OK;
}
В результате ошибка:
Код: Выделить всё
Error 1 error C2259: 'ATL::CComObject<Base>' : cannot instantiate abstract class c:\program files\microsoft visual studio 8\vc\atlmfc\include\atlcom.h 1787