设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 其他开发语言 >> 利用DirectShow开发自己的Filter
精品推荐
其他开发语言点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·Modem 常用AT指令集
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
·Thinking in C++ 简体中文第二版
·debug和release的区别
·error LNK2001: unresolved external symbol __ftol2 错误解决
·C库函数手册
·一个简单的C语言编译器
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

利用DirectShow开发自己的Filter

作者: 来源:网络文章 时间:2005-12-17 20:00:28

利用DirectShow开发自己的Filter(1)  

学习directshow已经有几天了,下面将自己的学习心得写下来,希望对其他的人有帮助。

Filter实质是个COM组件,所以学习开发Filter之前你应该对com的知识有点了解。Com组件的实质是一个实现了纯虚指针接口的C++对象。关于com的东西,这里不多少。

1 vc配置DShow的开发环境

  无论开发Filter还是开发Dshow的应用程序都要配置一下开发环境的,其实就是包含一下dshow用到的头文件和动态库。

 选择Tools菜单下面的Options。在弹出的Option对话框配置如下;

 添加头文件

 

选择动态库文件添加到工程中

 

2 创建工程以及Filter的入口函数XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

创建工程

一般情况下,创建Filter使用一个普通的Win32 DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过CoCreateInstance函数Filter实例;Filter与应用程序在二进制级别的协作。另外一种方法,也可以在MFC的应用程序项目中创建Filter

vc里新建一个工程,选择win32动态库,如下图;

 

这样生成了一个简单的DLL,只有一个Dllmain入口函数。

下面我要给这个filter添加入口函数了。

Filter是个基于DLLcom组件,所以一般的Filter都要实现下面几个入口函数

DllMain                  

            DllGetClassObject       

            DllCanUnloadNow         

            DllRegisterServer       

            DllUnregisterServer     

首先定义导出函数

要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dlleXPort),另外一种方法是在创建DLL文件时使用模块定义文件.Def

使用导出函数关键字_declspec(dllexport)创建MyDll.dll就是在 .h文件中定义定义函数如下,

extern "C" _declspec(dllexport)BOOL DllRegisterServer; 等等

为了用.def文件创建DLL,往该工程中加入一个文本文件,命名为MyDll.def,再在该文件中加入如下代码:

LIBRARY     MyFilter.ax

EXPORTS

            DllMain                 PRIVATE

            DllGetClassObject       PRIVATE

            DllCanUnloadNow         PRIVATE

            DllRegisterServer       PRIVATE

            DllUnregisterServer     PRIVATE

其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加@n,如Max@1Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。该DLL编译成功后,打开工程中的Debug目录,同样也会看到MyDll.dllMyDll.lib文件。

然后要定义这些函数的实现了,其实这些工作dshow的基类里都已经替我们做好了,我们所要做的就拿来用就是了

最重要的三个函数的实现一般如下

 

STDAPI DllRegisterServer()

{

    return AMovieDllRegisterServer2(TRUE);

}

 STDAPI DllUnregisterServer()

{

    return AMovieDllRegisterServer2(FALSE);

}

 extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);

BOOL APIENTRY DllMain(HANDLE hModule, DWord  dwReason,  LPVOID lpReserved)

{

        return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);

 

}

其中DllEntryPoint 是在C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\dllentry.cpp定义的,如果感兴趣我们可以去看看它的定义如下:

AMovieDllRegisterServer2函数是在下面

C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\dllsetup.cpp这个文件定义的,具体实现可以自己看看。

到了这里你恐怕要做点工作,还是要设置一下你的项目环境,否则恐怕你编译是通不过的,因为你用到了基类的一些东西,所以你要将你的dshow基类的定义和库文件包含进来。

首先包含

#include <Streams.h>

其次在Project –Setting菜单下配置自己的Filter输出的名字和连接的lib文件

 

 

共2页 9 7 [1] [28 :>

利用DirectShow开发自己的Filter 相关文章:
利用DirectShow开发自己的Filter 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com