Question

J'utilise un DirectShowLib qui est une enveloppe mince pour DirectShow. J'ai énuméré avec succès des dispositifs BDA et recueilli leurs CLSID. Maintenant, lorsque l'utilisateur sélectionne un périphérique par son nom et je sais que le CLSID choisi, je dois ajouter cet appareil à mon graphique de filtre.

Je l'ai fait ce qui suit:

Type type = Type.GetTypeFromCLSID(classid);
object device = Activator.CreateInstance(type);

Maintenant, la question est - quel genre d'objet que je suis arrivé ici dans l'appareil? Débogueur montre qu'il est un objet COM valide. Si je tente de le jeter aux IBaseFilter, je reçois une exception « Une telle interface prise en charge ». Je peux le jeter à IMoniker avec succès. Mais si j'essaie de faire ce qui suit:

int hr = graphBuilder.AddSourceFilterForMoniker(
    device, null, filtername, out receivedFilter);

Je reçois une erreur:

HRESULT: 0x800401e4 (2147746276)
Name: MK_E_SYNTAX

Je sais que la méthode AddSourceFilterForMoniker fonctionne très bien si je l'utilise juste après l'énumération, il semble donc je ne crée pas le droit de sobriquet.

Quelle est la bonne façon de créer un objet sobriquet si id classe est connu, donc je peux le transmettre à la AddSourceFilterForMoniker?

Était-ce utile?

La solution

Juste une supposition, mais il semble que vous ne créez pas un IMoniker que j'ai vu exiger une mise en œuvre IBindCtx être adoptée afin de fournir un contexte pour les opérations impliquant le sobriquet.

Cela étant dit, le AddSourceFilterForMoniker méthode est pas différente, que vous n'êtes pas passer un contexte de liaison pour le sobriquet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top