OOP no VB: cuidado que deve ser tomado ao usar ObjPtr

Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

OOP no VB: cuidado que deve ser tomado ao usar ObjPtr

ObjPtr é uma função não documentada do Visual Basic que pode ser usada em várias situações em que não se pode passar uma variável  tipo objeto COM. Um detalhe, porém, que não deve ser claro para a maioria dos programadores e que pode induzir a erros no uso desta função é que ObjPtr retorna um ponteiro para a interface do tipo da variável que lhe é passada como argumento. Ou seja, se um objeto implementa mais de uma interface, passar uma variável do tipo de uma destas interfaces como argumento para ObjPtr resultará em um retorno diferente daquele que se obteria passando como argumento uma variável de outro tipo de interface referenciando o mesmo objeto. Exemplo, a classe C implementa a interface da classe C2. Declaremos uma variável objC do tipo C e outra objC2 do tipo C2 como abaixo.

Dim objC as C, objC2 as C2

Instanciemos um objeto da classe C em objC:

Set objC = New C

Atribuamos este mesmo objeto a objC2:

Set objC2 = objC

Agora, testemos a igualdade dos ponteiros retornados para objC e objC2

Msgbox ObjPtr(objC) - ObjPtr(objC2)

A mensagem acima retornará um valor diferente de zero, indicando que os ponteiros retornados são diferentes.

Leve o que foi visto acima em conta ao usar ObjPtr.