Compartilhar via


Registrando um retorno de chamada no Visual Basic

Adicionar um retorno de chamada em Visual Basic é diferente do método usado no VBScript. A função GetRef usada no VBScript é diferente da usada em Visual Basic. Portanto, um desenvolvedor deve criar um objeto IDispatch que tenha a função de retorno de chamada como o método padrão. Este tópico fornece as informações necessárias para desenvolver aplicativos Visual Basic.

Para implementar esse retorno de chamada em um aplicativo

  1. Adicione referências a duas bibliotecas de objetos: TLBTypes.olb e VboostTypes6.olb. Essas bibliotecas de objetos são fornecidas com o código de exemplo do Ponto de Controle.

  2. Adicione uma referência a Cbklib.tlb. Esse arquivo define a estrutura da função de retorno de chamada.

    O cbklib.tlb é criado usando o arquivo cbklib.idl incluído como parte do código de exemplo do Ponto de Controle. É recomendável que o nome desse arquivo altere para funções de retorno de chamada que diferem na estrutura de seus parâmetros. Este exemplo usa MIDL para criar o arquivo de biblioteca de tipos.

  3. Escreva a função de retorno de chamada. Os parâmetros são os mesmos do exemplo VBScript no Registro de um Retorno de Chamada. Este exemplo imprime uma cadeia de caracteres sempre que um evento chega.

    Function eventHandler(ByVal callbackType As Variant, _
    ByVal svcObj As Variant, ByVal varName As Variant, _
    ByVal value As Variant) As Long
    
        On Error GoTo Error
        'Write some interesting code to do actual work here
    
        MsgBox "Event Handler Called"
        Exit Function
    
    Error:
        With Err
            If .Number > 0 Then
                eventHandler = .Number Or &H800A0000
            Else
                eventHandler = .Number
            End If
        End With
    End Function
    
  4. Adicione a função de retorno de chamada ao objeto IUPnPService , conforme mostrado no exemplo a seguir, ou em outro objeto, como IUPnPDeviceFinder, usando a biblioteca de tipos de retorno de chamada apropriada (cbklib.tbl).

    Public Sub AddCbFunction(upnpSvc As UPnPService)
    
        Dim X As CallbackIUnknownLib.CallBackInterface
        Dim obj As Object
        Dim ptinfo As ITypeInfo
        Dim ptcomp As ITypeComp
    
        With LoadTypeLibEx(App.Path & "\cbklib.tlb", _
          REGKIND_NONE).GetTypeComp
            .BindType "CallBackInterface", 0, ptinfo, ptcomp
        End With
    
        'NewDelegator is defined in FunctionDelegator.bas
        Set X = NewDelegator(AddressOf eventHandler) 
        Set obj = CreateStdDispatch(Nothing, ObjPtr(X), ptinfo)
        upnpSvc.AddCallback obj
    End Sub
    

No exemplo a seguir, o objeto IUPnPService é passado para a função. A função de retorno de chamada é adicionada como o parâmetro.

    Dim device as UPnPDevice
    Dim svcObj as UpnPService

    ' Initialize the device using the FindByType or using other methods of finding the devices
    Set svcObj = device.Services("appropriateService")
    Call AddCbFunction(svcObj)

Bibliotecas de objetos usadas no código de exemplo

Os exemplos anteriores e o código de exemplo do Ponto de Controle usam algumas das seguintes bibliotecas de objetos:

  1. TLBTypes.olb — Essa biblioteca define alguns dos tipos de biblioteca de tipos e interfaces que são usados no código de exemplo. Ele define algumas das funções a serem usadas em Visual Basic, como LoadTypeLibEx, que já estão disponíveis em C ou C++.
  2. VboostTypes6.olb — esta biblioteca define alguns tipos base que são usados em TLBTypes.olb e FunctionDelegator.bas. Mais informações sobre TLBTypes podem ser encontradas no livro Advanced Visual Basic 6: Power Techniques for Everyday Programs, de Matthew Curland (Addison-Wesley, julho de 2000, ISBN: 0-201-70712-8). (Este livro pode não estar disponível em alguns idiomas e países.)

O código de exemplo do Ponto de Controle e as bibliotecas a seguir estão relacionados a esta seção e são necessários para implementar esse retorno de chamada. Eles podem ser encontrados com o código de exemplo do Ponto de Controle:

  • Cbklib.idl
  • Cbklib.tlb
  • VboostTypes6.olb
  • TLBTypes.olb
  • FunctionDelegator.bas