WEB开发网
开发学院软件开发VC 利用 DirectShow 开发自己的 Filter 阅读

利用 DirectShow 开发自己的 Filter

 2006-07-23 11:33:58 来源:WEB开发网   
核心提示: DllMainDllGetClassObjectDllCanUnloadNowDllRegisterServerDllUnregisterServer首先定义导出函数:要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),利用 DirectSho
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@1,Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。该DLL编译成功后,打开工程中的Debug目录,同样也会看到MyDll.dll和MyDll.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这个文件定义的,具体实现可以自己看看。

上一页  1 2 3 4 5 6 7  下一页

Tags:利用 DirectShow 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接