Compartir a través de


Funciones DLL

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

En este tema se describe cómo implementar un componente como una biblioteca de vínculos dinámicos (DLL) en Microsoft DirectShow.

Un archivo DLL debe implementar las siguientes funciones para que se puedan registrar, anular el registro y cargarse en la memoria.

  • DllMain: el punto de entrada dll. El nombre DllMain es un marcador de posición para el nombre de la función definida por la biblioteca. La implementación de DirectShow usa el nombre DllEntryPoint. Para más información, consulte El SDK de plataforma.
  • DllGetClassObject: crea una instancia de generador de clases. Se describe en las secciones anteriores.
  • DllCanUnloadNow: consulta si el archivo DLL se puede descargar de forma segura.
  • DllRegisterServer: crea entradas del Registro para el archivo DLL.
  • DllUnregisterServer: quita las entradas del Registro del archivo DLL.

De estos, DirectShow implementa los tres primeros. Si la plantilla de fábrica proporciona una función de inicialización en la variable miembro m_lpfnInit , se llama a esa función desde dentro de la función de punto de entrada dll. Para obtener más información sobre cuándo el sistema llama a la función de punto de entrada DLL, vea DllMain.

Debe implementar DllRegisterServer y DllUnregisterServer, pero DirectShow proporciona una función denominada AMovieDllRegisterServer2 que realiza el trabajo necesario. El componente simplemente puede encapsular esta función, como se muestra en el ejemplo siguiente:

STDAPI DllRegisterServer()
{
    return AMovieDllRegisterServer2( TRUE );
}

STDAPI DllUnregisterServer()
{
    return AMovieDllRegisterServer2( FALSE );
}

Sin embargo, en DllRegisterServer y DllUnregisterServer puede personalizar el proceso de registro según sea necesario. Si el archivo DLL contiene un filtro, es posible que tenga que realizar algún trabajo adicional. Para obtener más información, vea Cómo registrar filtros directShow.

En el archivo module-definition (.def), exporte todas las funciones DLL excepto la función de punto de entrada. A continuación se muestra un archivo .def de ejemplo:

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

Puede registrar el archivo DLL mediante la utilidad Regsvr32.exe.

Cómo crear un archivo DLL de filtro directShow