生成 DirectShow 筛选器

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

建议使用 DirectShow 基类来实现 DirectShow 筛选器。 若要使用基类生成,除了 设置生成环境中列出的步骤外,还执行以下步骤:

  • 生成位于 SDK 根目录下的 Samples\Multimedia\DirectShow\BaseClasses 目录中的基类库。 库有两个版本:strmbase.lib) (零售版本和 strmbasd.lib) (调试版本。
  • 包括头文件 Streams.h。
  • 使用__stdcall调用约定。
  • 根据需要使用多线程 C 运行时库 (调试或零售) 。
  • 包括导出 DLL 函数 (.def) 文件的定义。 下面是定义文件的示例。 它假定输出文件命名为 MyFilter.dll。
LIBRARY MYFILTER.DLL
EXPORTS 
    DllMain             PRIVATE
    DllGetClassObject   PRIVATE
    DllCanUnloadNow     PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
  • 链接到以下 lib 文件。
Label
调试生成 Strmbasd.lib、Msvcrtd.lib、Winmm.lib
零售版本 Strmbase.lib、Msvcrt.lib、Winmm.lib
  • 在链接器设置中选择“忽略默认库”选项。
  • 在源代码中声明 DLL 入口点,如下所示:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}

早期版本

对于 DirectShow 9.0 之前的基类库版本,还必须执行以下操作:

  • 对于调试版本,请定义预处理器标志 DEBUG。

对于 DirectShow 9.0 及更高版本中提供的基类库版本,不需要此步骤。

DirectShow 基类

编写 DirectShow 筛选器