Fonctions DLL

[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.]

Cette rubrique explique comment implémenter un composant en tant que bibliothèque de liens dynamiques (DLL) dans Microsoft DirectShow.

Une DLL doit implémenter les fonctions suivantes afin qu’elle puisse être inscrite, non enregistrée et chargée en mémoire.

  • DllMain : point d’entrée dll. Le nom DllMain est un espace réservé pour le nom de fonction défini par la bibliothèque. L’implémentation DirectShow utilise le nom DllEntryPoint. Pour plus d’informations, consultez le Kit de développement logiciel (SDK) de plateforme.
  • DllGetClassObject : crée une fabrique de classes instance. Décrit dans les sections précédentes.
  • DllCanUnloadNow : demande si la DLL peut être déchargée en toute sécurité.
  • DllRegisterServer : crée des entrées de Registre pour la DLL.
  • DllUnregisterServer : supprime les entrées de Registre pour la DLL.

Parmi ceux-ci, les trois premiers sont implémentés par DirectShow. Si votre modèle de fabrique fournit une fonction d’initialisation dans la variable membre m_lpfnInit , cette fonction est appelée à partir de la fonction de point d’entrée de la DLL. Pour plus d’informations sur le moment où le système appelle la fonction de point d’entrée DLL, consultez DllMain.

Vous devez implémenter DllRegisterServer et DllUnregisterServer, mais DirectShow fournit une fonction nommée AMovieDllRegisterServer2 qui effectue le travail nécessaire. Votre composant peut simplement encapsuler cette fonction, comme illustré dans l’exemple suivant :

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

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

Toutefois, dans DllRegisterServer et DllUnregisterServer , vous pouvez personnaliser le processus d’inscription en fonction des besoins. Si votre DLL contient un filtre, vous devrez peut-être effectuer un travail supplémentaire. Pour plus d’informations, consultez Comment inscrire des filtres DirectShow.

Dans votre fichier de définition de module (.def), exportez toutes les fonctions DLL à l’exception de la fonction point d’entrée. Voici un exemple de fichier .def :

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

Vous pouvez inscrire la DLL à l’aide de l’utilitaire Regsvr32.exe.

Comment créer une DLL de filtre DirectShow