caminho mais rápido para chamar uma COM objetos Método sem usar um RCW
-
03-07-2019 - |
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?
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.