Partilhar via


Funções DLL

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize 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 biblioteca de vínculo dinâmico (DLL) no Microsoft DirectShow.

Uma DLL deve implementar as seguintes funções para que 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 DirectShow usa o nome DllEntryPoint. Para obter mais informações, consulte o Platform SDK.
  • 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 do Registro para a DLL.
  • DllUnregisterServer: Remove 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 de membro m_lpfnInit, essa função será chamada de dentro da função de ponto de entrada DLL. Para obter mais informações sobre quando o sistema chama a função de ponto de entrada 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, como mostrado no exemplo a seguir:

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

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

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

No arquivo de definição de módulo (.def), exporte todas as funções DLL, exceto a função de ponto de entrada. A seguir está 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