Génération de filtres DirectShow

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Les classes de base DirectShow sont recommandées pour l’implémentation de filtres DirectShow. Pour générer avec les classes de base, effectuez les étapes suivantes, en plus des étapes répertoriées dans Configuration de l’environnement de build :

  • Générez la bibliothèque de classes de base, située dans le répertoire Samples\Multimedia\DirectShow\BaseClasses, sous le répertoire racine du SDK. Il existe deux versions de la bibliothèque : une version commerciale (Strmbase.lib) et une version de débogage (Strmbasd.lib).
  • Incluez le fichier d’en-tête Streams.h.
  • Utilisez la convention d’appel __stdcall.
  • Utilisez la bibliothèque d’exécution C multithread (débogage ou vente au détail, le cas échéant).
  • Incluez un fichier de définition (.def) qui exporte les fonctions DLL. Voici un exemple de fichier de définition. Il suppose que le fichier de sortie est nommé MyFilter.dll.
LIBRARY MYFILTER.DLL
EXPORTS 
    DllMain             PRIVATE
    DllGetClassObject   PRIVATE
    DllCanUnloadNow     PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
  • Lien vers les fichiers lib suivants.
Étiquette Valeur
Build de débogage Strmbasd.lib, Msvcrtd.lib, Winmm.lib
Retail Build Strmbase.lib, Msvcrt.lib, Winmm.lib
  • Choisissez l’option « ignorer les bibliothèques par défaut » dans les paramètres de l’éditeur de liens.
  • Déclarez le point d’entrée DLL dans votre code source, comme suit :
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}

Versions antérieures

Pour les versions de la bibliothèque de classes de base antérieures à DirectShow 9.0, vous devez également effectuer les opérations suivantes :

  • Pour les builds de débogage, définissez l’indicateur de préprocesseur DEBUG.

Cette étape n’est pas requise pour la version de la bibliothèque de classes de base disponible dans DirectShow 9.0 et versions ultérieures.

DirectShow Base Classes

Écriture de filtres DirectShow