Visual Basic 6 - Automação OLE - Usando Early Binding e Late Binding


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.

Usando Ligação Atual

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:


José Carlos Macoratti