Pergunta

Eu estou tentando encontrar a forma mais limpa e mais rápida para chamar uma COM objetos métodos.

Eu estava usando um RCW para o objeto, mas cada vez que uma nova versão do objeto terceiros COM sai suas mudanças GUID que, em seguida presta o RCW inútil, então eu tive que mudar e começar a usar

Type mytype = Type.GetTypeFromProgID("MyCOMApp.Application"); 

de modo que cada vez que uma nova versão do objeto COM sai Eu não tenho a recomplie e reimplantar meu aplicativo.

No momento eu estou usando refelection como mytype.InvokeMemeber mas eu sinto que é tão lento em comparação com apenas chamando o RCW.

Como é que toda a gente enfrentar o problema da mudança versões 3rd party COM objeto, mas ainda mantendo a velocidade de um RCW?

Foi útil?

Solução

Se você quiser fazer as chamadas na reflexão mais fácil, você poderia usar VB.NET, e fazer chamadas atrasados ??em uma variável digitada como Objeto. VB.NET vai ajudar com as chamadas para reflexão. Você também pode definir uma referência para Microsoft.VisualBasic.dll e fazer a chamada para CallByName assim como para ajudar com as chamadas de reflexão.

No entanto, é o IID (a interface GUID) ou o GUID de classe que mudanças? Se é a classe GUID que as mudanças, então você pode definir a interface de uma vez, e, em seguida, obter o tipo através de uma chamada para GetTypeFromProgID. Uma vez que você tem isso, você pode passar o tipo para o método CreateInstance da classe Activator e, em seguida, atirado para a interface, que não vai mudar.

Se o IID muda, no entanto, você terá que usar a reflexão de cada vez.

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