Come arrivare dispositivo moniker con una classe nota id?
-
23-09-2019 - |
Domanda
Sto usando un DirectShowLib che è un wrapper sottile per DirectShow. Ho enumerato con successo dispositivi BDA e raccolto le loro CLSID. Ora, quando l'utente seleziona un dispositivo per nome e io conosco il CLSID scelta, ho bisogno di aggiungere questo dispositivo al mio grafico di filtro.
Ho fatto la seguente:
Type type = Type.GetTypeFromCLSID(classid);
object device = Activator.CreateInstance(type);
Ora la domanda è - quale tipo di oggetto sono arrivato qui nel dispositivo? Debugger dimostra che è un oggetto COM valido. Se provo a lanciarlo a IBaseFilter, ottengo un'eccezione "Interfaccia non supportata". Posso gettarlo ai IMoniker successo. Ma poi se cerco di fare quanto segue:
int hr = graphBuilder.AddSourceFilterForMoniker(
device, null, filtername, out receivedFilter);
ottengo un errore:
HRESULT: 0x800401e4 (2147746276)
Name: MK_E_SYNTAX
So che il metodo AddSourceFilterForMoniker funziona bene se lo uso subito dopo l'enumerazione, così sembra solo che non creare il giusto moniker.
Qual è il modo giusto per creare l'oggetto moniker se la classe id è nota, così posso passarlo al AddSourceFilterForMoniker?
Soluzione
Solo una supposizione, ma sembra non si sta creando una IBindCtx attuazione. Tutte le operazioni che coinvolgono IMoniker che ho visto richiedere l'implementazione IBindCtx da passare al fine di fornire un contesto per operazioni che coinvolgono il moniker.
Detto questo, il AddSourceFilterForMoniker il metodo non è diversa, nel senso che non sta passando un contesto di associazione per il moniker.