Criando filtros do DirectShow
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]
As classes base do DirectShow são recomendadas para implementar filtros directShow. Para compilar com as classes base, execute as seguintes etapas, além das etapas listadas em Configurando o ambiente de build:
- Crie a biblioteca de classes base, localizada no diretório Samples\Multimedia\DirectShow\BaseClasses, no diretório raiz do SDK. Há duas versões da biblioteca: uma versão de varejo (Strmbase.lib) e uma versão de depuração (Strmbasd.lib).
- Inclua o arquivo de cabeçalho Streams.h.
- Use a convenção de chamada __stdcall.
- Use a biblioteca de tempo de execução C multithreaded (depuração ou varejo, conforme apropriado).
- Inclua um arquivo de definição (.def) que exporta as funções DLL. Veja a seguir um exemplo de um arquivo de definição. Ele pressupõe que o arquivo de saída seja nomeado MyFilter.dll.
LIBRARY MYFILTER.DLL
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
- Link para os arquivos lib a seguir.
Rótulo | Valor |
---|---|
Compilação de depuração | Strmbasd.lib, Msvcrtd.lib, Winmm.lib |
Build de Varejo | Strmbase.lib, Msvcrt.lib, Winmm.lib |
- Escolha a opção "ignorar bibliotecas padrão" nas configurações do vinculador.
- Declare o ponto de entrada de DLL em seu código-fonte, da seguinte maneira:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}
Versões anteriores
Para versões da biblioteca de classes base antes do DirectShow 9.0, você também deve fazer o seguinte:
- Para builds de depuração, defina o sinalizador de pré-processador DEBUG.
Esta etapa não é necessária para a versão da biblioteca de classes base que está disponível no DirectShow 9.0 e posterior.