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.