Pergunta

Estou usando um DirectShowlib, que é um invólucro fino para o DirectShow. Enumerei com sucesso os dispositivos BDA e colecionei seus clsids. Agora, quando o usuário seleciona um dispositivo pelo nome e eu sei o clsid escolhido, preciso adicionar este dispositivo ao meu gráfico de filtro.

Eu fiz o seguinte:

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

Agora a pergunta é - que tipo de objeto eu recebi aqui no dispositivo? O depurador mostra que é um objeto COM válido. Se eu tentar lançá -lo para o iBaseFilter, recebo uma exceção "não é suportada por essa interface". Eu posso lançá -lo para imoniker com sucesso. Mas então se eu tentar fazer o seguinte:

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

Eu recebo um erro:

HRESULT: 0x800401e4 (2147746276)
Name: MK_E_SYNTAX

Eu sei que o método AddSourceFilterFonMoniker funciona bem se eu o usar logo após a enumeração, então parece que eu simplesmente não criei o apelido certo.

Qual é a maneira certa de criar o objeto Moniker se o ID da classe for conhecido, para que eu possa passar para o addSourceFilterFormoniker?

Foi útil?

Solução

Apenas um palpite, mas parece que você não está criando um Ibindctx implementação. Todas as operações que envolvem Imoniker Que eu vi exigir uma implementação do IBindCTX a ser aprovada para fornecer contexto para operações envolvendo o apelido.

Dito isto, o AddSourceFilterFonMoniker O método não é diferente, pois você não está passando um contexto vinculativo para o apelido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top