本样例是在VirtualCamera的基础上加入的自己定义接口用来实现exe控制osd的显示。

1. 接口部分

#ifndef __H_MyFilter__
#define __H_MyFilter__

#ifdef __cplusplus
extern "C" {
#endif
//#include <initguid.h>
//EXTERN_GUID
EXTERN_GUID(IID_IMyFilter,  
0xef31f705, 0x32a7, 0x477a, 0x90, 0xc9, 0x2c, 0x7e, 0x81, 0xeb, 0x2, 0x5d);

DECLARE_INTERFACE_(IMyFilter,IUnknown)
{
STDMETHOD(setOSD) (THIS_ int osd_en) PURE;
};
#ifdef __cplusplus
}
#endif

#endif

2.filter继承接口

#include "myfilter.h"
class CVCam : public CSource ,public IMyFilter
{
public:

static CUnknown * WINAPI CreateInstance(LPUNKNOWN lpunk, HRESULT *phr); 
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);//????
DECLARE_IUNKNOWN;
STDMETHODIMP  setOSD(int osd_en);
    IFilterGraph *GetGraph() {return m_pGraph;}
    int osd_enable;
private:
    CVCam(LPUNKNOWN lpunk, HRESULT *phr);
CVCamPin *m_pPin;

public:

};

/////////////////////////////////////

STDMETHODIMP  CVCam::setOSD(int osd_en)
{
osd_enable = osd_en;
return S_OK;
}

STDMETHODIMP CVCam::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
if(riid == _uuidof(IAMStreamConfig) || riid == _uuidof(IKsPropertySet))
{
// m_paStreams[0]->QueryInterface(riid, ppv);
return m_paStreams[0]->QueryInterface(riid, ppv);
}
else if (riid == IID_IMyFilter)
{
return GetInterface((IMyFilter *) this, ppv);
}
else
return CBaseFilter::NonDelegatingQueryInterface(riid, ppv);//改动
}

3.应用程序调用

        //依据guid 查找filter

hr = CoCreateInstance(CLSID_myFilter, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&pSrcFilter));

IMyFilter *pInterface = NULL;

hr = pSrcFilter->QueryInterface(IID_IMyFilter, (void **)&pInterface);//从filter上查询接口

pInterface->setOSD(0);//使用接口函数



怎样给filter加入自己定义接口及调用的更多相关文章

  1. 怎样给filter加入自己定义接口

    .在Cfilter类的定义中实现Interface接口的函数的定义: //-----------------------Interface methods----------------------- ...

  2. java 类中定义接口的调用方法

    public class Human { public interface MyAction { public void getPower(); } } public class Test{ publ ...

  3. JAVA定义接口格式:

    [public]interface 接口名称 [extends父接口名列表] { //静态常量 [public] [static] [final] 数据类型变量名=常量值; //抽象方法 [publi ...

  4. Android中定义接口的方法

    1.接口方法用于回调(这里定义接口是为了使用其接口方法): public interface ICallback { public void func(); } public class Caller ...

  5. VC++ 使用attributes定义接口

      1.定义预处理命令_ATL_ATTRIBUTES 2.在一个全局的Cpp文件里面配置module的attribute [module(dll, uuid = "{3845951F-15B ...

  6. interface关键字定义接口

    package interface0; public interface InterfaceTest { /* * 接口的定义,使用interface关键字定义接口 */ public interfa ...

  7. “全栈2019”Java第六十章:如何定义接口

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. struts2 在拦截器进行注入(依据Action是否实现自己定义接口)

    比如:经常在Action中都须要获取当前登录的User,就须要获取Session.然后从Session获取当前登录的User,由于这些步骤都是反复操作,能够想办法在拦截器中进行实现.能够自己定义一个接 ...

  9. 用关键字interface定义接口,通过关键字implements来实现接口

    [定义]Java中,能够完成特定功能的,由若干属性和方法组织成的,相对独立的属性和方法的集合. [用途]实现类的多继承,以解决Java只能单继承,不支持多继承的问题. [特点] 用关键字interfa ...

随机推荐

  1. 能用存储过程的DBHelper类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  2. JavaScript学习总结【2】、JS基础

    1.JS 命名规范 命名规范是很有必要的,可增强代码的可读性,一眼就能看懂要表达的意思,规范就是符合规则,使代码有利于后期维护,也能很大程度的提高开发效率.一个正常的网站有很多 JS 代码,如果在编写 ...

  3. 关于if/else if

    今天写存储过程的时候发现了个问题,就是在用if.elsif拼接sql的时候,得到的结果跟想象中 的不一样,大概描述是:  我传进去多个参数,然后判断每个字段是否为空,非空则将字段拼接上去,结果跟预料的 ...

  4. 前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome(学习到的知识)

    文章地址:http://www.cnblogs.com/rubylouvre/p/4597344.html 一.window.URL 在Chrome中,window.URL和window.webkit ...

  5. Octopress 之 Mac 版环境配置

    前提条件: 1.安装了 Git2.用 rbenv 或 RVM 安装了 Ruby 1.9.3 以上版本3.安装了 ExecJS 的一种支持 JavaScript 运行环境 一.安装 Octopress ...

  6. Choose the best route

    hdu 2680:http://acm.hdu.edu.cn/showproblem.php?pid=2680 这道题值得一提的两点:在图论中注意重边问题是必须的,有向无向也是同等重要的,如这道题 f ...

  7. 【POI2003/2004 stage I】

    [原题在此] Let us consider a game on a rectangular board m x 1 consisting of m elementary squares number ...

  8. Java中static作用及用法详解(转)

    1.1概述: static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存 ...

  9. 根据rowid回表

    select rowid from T_PM_DEPOSIT_HIS partition(DEPOSIT_HIS_20120104) ; SQL> set linesize 200 SQL> ...

  10. [LeetCode#212]Word Search II

    Problem: Given a 2D board and a list of words from the dictionary, find all words in the board. Each ...