Share via


Compilazione di filtri DirectShow

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Le classi di base DirectShow sono consigliate per l'implementazione di filtri DirectShow. Per compilare con le classi di base, seguire questa procedura, oltre ai passaggi elencati in Configurazione dell'ambiente di compilazione:

  • Compilare la libreria di classi di base, disponibile nella directory Samples\Multimedia\DirectShow\BaseClasses, nella directory radice dell'SDK. Sono disponibili due versioni della libreria: una versione definitiva (Strmbase.lib) e una versione di debug (Strmbasd.lib).
  • Includere il file di intestazione Streams.h.
  • Usare la convenzione di chiamata __stdcall.
  • Usare la libreria di runtime C multithreading (debug o vendita al dettaglio, in base alle esigenze).
  • Includere un file di definizione (con estensione def) che esporta le funzioni DLL. Di seguito è riportato un esempio di file di definizione. Presuppone che il file di output sia denominato MyFilter.dll.
LIBRARY MYFILTER.DLL
EXPORTS 
    DllMain             PRIVATE
    DllGetClassObject   PRIVATE
    DllCanUnloadNow     PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
  • Collegamento ai file lib seguenti.
Etichetta Valore
Eseguire il debug della compilazione Strmbasd.lib, Msvcrtd.lib, Winmm.lib
Compilazione definitiva Strmbase.lib, Msvcrt.lib, Winmm.lib
  • Scegliere l'opzione "Ignora librerie predefinite" nelle impostazioni del linker.
  • Dichiarare il punto di ingresso della DLL nel codice sorgente, come indicato di seguito:
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}

Versioni precedenti

Per le versioni della libreria di classi di base prima di DirectShow 9.0, è necessario eseguire le operazioni seguenti:

  • Per le compilazioni di debug, definire il flag del preprocessore DEBUG.

Questo passaggio non è necessario per la versione della libreria di classi di base disponibile in DirectShow 9.0 e versioni successive.

Classi di base DirectShow

Scrittura di filtri DirectShow