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
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.
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.
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
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:
- 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++.
- 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