最近在学习编写Filter,如果新增加一个接口的话并继承于IUnknown的话,首要在自定义接口的实现中添加DECLARE_IUNKNOWN宏.否则会有如下的提示.
C:/DirectShowStudy/Filter/MyFilter.cpp(41) : error C2259: 'CMyFilter' : cannot instantiate abstract class due to following members:
C:/DirectShowStudy/Filter4/MyFilter.h(16) : see declaration of 'CMyFilter
C:/DirectShowStudy/Filter4/MyFilter.cpp(41) : warning C4259: 'long __stdcall IUnknown::QueryInterface(const struct _GUID &,void ** )' : pure virtual function was not defined
D:/Program Files/Microsoft Visual Studio/VC98/INCLUDE/unknwn.h(109) : see declaration of 'QueryInterface'
C:/DirectShowStudy/Filter4MyFilter.cpp(41) : warning C4259: 'unsigned long __stdcall IUnknown::AddRef(void)' : pure virtual function was not defined
D:/Program Files/Microsoft Visual Studio/VC98/INCLUDE/unknwn.h(113) : see declaration of 'AddRef'
C:/DirectShowStudy/Filter4/MyFilter.cpp(41) : warning C4259: 'unsigned long __stdcall IUnknown::Release(void)' : pure virtual function was not defined
D:/Program Files/Microsoft Visual Studio/VC98/INCLUDE/unknwn.h(115) : see declaration of 'Release'
代码举例说明:
//IMyTitle.h
DECLARE_INTERFACE_(IMyTitle, IUnknown)
{
STDMETHOD(GetTitleCount) (THIS_
long *inType
) PURE;
};
//'CMyFilter
class CMyFilter : public CTransInPlaceFilter
,public IMyTitle
{
public:
DECLARE_IUNKNOWN;
};