Você já usou Early Binding (ligação Atual) ou Late Binding (ligação tardia) ?
Talvez você tenha até usado , sem saber que usou .
Este artigo mostra como a utilização de Late Binding/Early Binding pode afetar o desempenho , flexibilidade e manutenção do seu sistema. Vamos lá...
A automação OLE é um processo onde um componente de um programa se comunica e/ou controla outro componente usando o modelo COM - Component Object Model.
Na verdade esta técnica é básica para muitos componentes de comunicação usadas em linguagens como Visual Basic ou VBA e torna-se assim parte constante de muitos programas.
Um objeto de Automação é qualquer objeto que suporta a interface IDispatch ; esta interface permite ao cliente invocar os métodos e propriedades em tempo de execução sem saber exatamente com qual objeto ele esta se comunicando. A este processo chamamos de Late Binding ou Ligação Tardia.
Estabelecendo uma ligação
Uma ligação ( Binding) é um processo de chamada de função escrita para o código atual que implementa a função e é feito quando a aplicação é compilada e todas as funções chamadas no código estarão ligadas/definidas antes do código ser executado. Assim , seu código é constituído de partes que precisam estar agrupadas antes do código poder ser lido. A ligação é a ação de substituir os nomes das funções pelo endereços de memória para onde o código será referenciado.
Para os objetos COM o endereço é uma referência na memória em uma tabela de ponteiros (v-table) que é manipulada pelo objeto. Quando uma função COM é ligada , a ligação é feita através da v-table.
A estrutura de um objeto COM é simples . Quando o seu código inicia uma referência para um objeto , ele referencia um ponteiro para o topo da tabela v-table. A tabela v-table é um array de endereços de memória onde cada entrada representa uma função diferente que pode ser chamada para aquele objeto.
o que acontece quando um objeto é instanciado. Como todos os objeto herdam de IUnknown , as primeiras três entradas na tabela são métodos IUnknow. Quando você precisar liberar um objeto , seu codigo vai chamar a terceira função na tabela v-table.(IUnknown::Release). Este trabalho todo é feito pelo Visual Basic de forma transparente e você nunca vai ter que tratar diretamente com uma tabela v-table.
O exemplo acima é conhecido como ligação atual (v-table) e para todos os objetos COM esta forma de ligação acontece sempre que uma interface IUnKnown para um objeto COM for chamada.
Para usar a ligação atual em um objeto você precisa conhecer como a tabela v-table esta definida. No VB você pode fazer isto incluindo uma referencia para o tipo de livraria que descreve o objeto, sua interface , e todas as funções que pode ser chamadas para o objeto. Feito isto você pode declarar um objeto como sendo de um certo tipo e então definir e usar o objeto.
Por exemplo , se você quiser criar uma automação com o Excel usando earling binding você deve fazer o seguinte:
' Define a referencia para 'Microsoft Excel 8.0 Object Library' em ' Project|References ' Declara a variável objeto como um objeto early-bound Dim oExcel As Excel.Application Set oExcel = CreateObject("Excel.Application") ' a propriedade Visible esta sendo chamada via v-table oExcel.Visible = True |
Exemplo de código VB usando - Late Binding - ligação Atual |
Tudo isto funciona bem quando você conhece exatamente o objeto com o qual voce quer trabalhar, mas , e se você precisar criar uma automação com um componente/[objeto que você não conhece ?
Usando Ligação Tardia
Além da interface IUnKnown o modelo COM possui a interface IDispatch e os objetos que implementam a interface IDispatch efetuam a ligação tardia - Late Binding - pois as propriedades e métodos que eles estão invocando são determinados somente em tempo de execução através do métodos da IDispatch para localizá-los.
A funcionalidade da interface é controlada por duas funções : GetIDsOfNames e Invoke ; a primeira mapeia os nomes da funções para um identificador que representa a função ; desde que você saiba o identificador (ID) para a função que você quer chamar , você pode chamar usando a função Invoke. A isto chamamos - Late Binding.
No Visual Basic isto acontece quando você declara uma variável objeto como do tipo Object ; isto na verdade esta dizendo para o VB usar a interface IDispatch e consequentemente a ligação tardia. Veja como seria isto no VB:
' Para usar a Late Binding você não precisa referenciar uma livraria ' através da interface IDispatch, os métodos serão dinamicamente ' localizaos e invocados em tempo de execução. ' Declara o objeto como um objeo late-bound Dim oExcel As Object Set oExcel = CreateObject("Excel.Application") ' a propriedade Visisble é chamda via IDispatch oExcel.Visible = True |
Exemplo de código VB usando - Late Binding - ligação Tardia |
Como você pode ver o resto do código é idêntico , a única diferença entre a ligação atual e a ligação tardia esta na declaração da variável objeto.
Qual forma de ligação usar - Ligação Atual ou Ligação Tardia
A forma mais recomendada de ligação é a early binding - ligação atual ; o desempenho é melhor pois sua aplicação faz a ligação diretamente com o endereço da função que esta sendo chamada ; a velocidade também chega a ser duas vezes mais rápida que a ligação tardia pois na ligação tardia o VB tem que .acrescentar código extra para fazer a chamada das funções e isto leva mais tempo.
Além disto early binding também fornece um tipo mais seguro pois quando você tem uma referencia definida para um livraria de tipos de componentes o VB fornece a ajuda da IntelliSence e você pode ter uma visão das propriedades e métodos suportados pelo objeto em tempo de desenho da aplicação evitando assim que você cometa erros que somente serão conhecidos em tempo de execução.(informando uma propriedade ou método não suportado).
A Ligação Tardia ainda pode ser útil quando você não conhece a interface do objeto em tempo de desenho ou quando você quer fazer uma ligação entre múltiplas versões de um componente que foi modificado ou que teve sua interface adaptada entre a diversas versões. Neste você vai usar a ligação tardia - Late Binding.
Conclusão : sempre que puder use a Early Binding.
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
Q245115 INFO: Using Early Binding and Late Binding in Automation