Frage

Ich bin mit einem DirectShowLib, der eine dünne Hülle für Directshow ist. Ich habe erfolgreich BDA Geräte aufgezählt und ihre CLSIDs gesammelt. Nun, wenn der Benutzer wählt ein Gerät mit Namen und ich die gewählten CLSID wissen, ich brauche dieses Gerät meiner Filtergraph hinzuzufügen.

Ich habe die folgenden:

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

Nun ist die Frage - welche Art von Objekt, das ich in Gerät hier bekam? Debugger zeigt, dass es ein gültiges Com-Objekt. Wenn ich versuche, es zu IBaseFilter zu werfen, erhalte ich eine Ausnahme „Keine solche Schnittstelle nicht unterstützt“. Ich kann es IMoniker erfolgreich gegossen. Aber dann, wenn ich versuche, die folgenden zu tun:

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

Ich erhalte eine Fehlermeldung:

HRESULT: 0x800401e4 (2147746276)
Name: MK_E_SYNTAX

Ich weiß, dass das Verfahren AddSourceFilterForMoniker funktioniert gut, wenn ich es verwenden, direkt nach Aufzählung, so dass es scheint, dass ich das Moniker Recht einfach nicht schaffen.

Was ist der richtige Weg Moniker-Objekt zu erstellen, wenn Klassen-ID bekannt ist, so dass ich es in die AddSourceFilterForMoniker passieren kann?

War es hilfreich?

Lösung

Nur eine Vermutung, aber es scheint, dass Sie nicht ein IMoniker beinhalten, dass ich gesehen erfordert die Moniker eine IBindCtx Implementierung geleitet, um zu Kontext für Operationen bereitzustellen, beteiligt ist.

That being said, die AddSourceFilterForMoniker Methode ist nicht anders, dass Sie keinen bind Kontext für die Moniker sind vorbei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top