[DirectShow][DECLARE_IUNKNOWN]

本文介绍了在DirectShow中创建自定义Filter时遇到的问题及解决方法。若自定义接口继承了IUnknown,需要在实现中添加DECLARE_IUNKNOWN宏,否则会因未实现纯虚函数而无法实例化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近在学习编写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;

};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值