DLL 函数
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
本主题介绍如何在 Microsoft DirectShow 中 (DLL) 将组件实现为动态链接库。
DLL 必须实现以下函数,以便可以注册、取消注册和加载到内存中。
- DllMain:DLL 入口点。 名称 DllMain 是库定义的函数名称的占位符。 DirectShow 实现使用名称 DllEntryPoint。 有关详细信息,请参阅平台 SDK。
- DllGetClassObject:创建类工厂实例。 如前几节所述。
- DllCanUnloadNow:查询是否可以安全地卸载 DLL。
- DllRegisterServer:为 DLL 创建注册表项。
- DllUnregisterServer:删除 DLL 的注册表项。
其中,前三个由 DirectShow 实现。 如果工厂模板在 m_lpfnInit 成员变量中提供初始化函数,则会从 DLL 入口点函数内部调用该函数。 有关系统何时调用 DLL 入口点函数的详细信息,请参阅 DllMain。
必须实现 DllRegisterServer 和 DllUnregisterServer,但 DirectShow 提供了一个名为 AMovieDllRegisterServer2 的函数,用于执行必要的工作。 组件只需包装此函数,如以下示例所示:
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2( TRUE );
}
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2( FALSE );
}
但是,在 DllRegisterServer 和 DllUnregisterServer 中 ,可以根据需要自定义注册过程。 如果 DLL 包含筛选器,则可能需要执行一些额外的工作。 有关详细信息,请参阅 如何注册 DirectShow 筛选器。
在模块定义 (.def) 文件中,导出除入口点函数之外的所有 DLL 函数。 下面是一个示例 .def 文件:
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
可以使用 Regsvr32.exe 实用工具注册 DLL。
相关主题