Partilhar via


Funções DLL

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Este tópico descreve como implementar um componente como uma DLL (biblioteca de vínculo dinâmico) no Microsoft DirectShow.

Uma DLL deve implementar as seguintes funções para que ela possa ser registrada, não registrada e carregada na memória.

  • DllMain: o ponto de entrada DLL. O nome DllMain é um espaço reservado para o nome da função definida pela biblioteca. A implementação do DirectShow usa o nome DllEntryPoint. Para obter mais informações, consulte o SDK da plataforma.
  • DllGetClassObject: cria uma instância de fábrica de classe. Descrito nas seções anteriores.
  • DllCanUnloadNow: consulta se a DLL pode ser descarregada com segurança.
  • DllRegisterServer: cria entradas de registro para a DLL.
  • DllUnregisterServer: remove as entradas do Registro para a DLL.

Destes, os três primeiros são implementados pelo DirectShow. Se o modelo de fábrica fornecer uma função de inicialização na variável membro m_lpfnInit , essa função será chamada de dentro da função de ponto de entrada da DLL. Para obter mais informações sobre quando o sistema chama a função de ponto de entrada de DLL, consulte DllMain.

Você deve implementar DllRegisterServer e DllUnregisterServer, mas o DirectShow fornece uma função chamada AMovieDllRegisterServer2 que faz o trabalho necessário. Seu componente pode simplesmente encapsular essa função, conforme mostrado no exemplo a seguir:

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

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

No entanto, em DllRegisterServer e DllUnregisterServer , você pode personalizar o processo de registro conforme necessário. Se a DLL contiver um filtro, talvez seja necessário fazer algum trabalho adicional. Para obter mais informações, confira Como registrar filtros do DirectShow.

No arquivo de definição de módulo (.def), exporte todas as funções de DLL, exceto para a função de ponto de entrada. Veja a seguir um exemplo de arquivo .def:

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

Você pode registrar a DLL usando o utilitário Regsvr32.exe.

Como criar uma DLL de filtro DirectShow