Share via


Registro de una devolución de llamada en Visual Basic

Agregar una devolución de llamada en Visual Basic es diferente del método usado en VBScript. La función GetRef usada en VBScript es diferente de la que se usa en Visual Basic. Por lo tanto, un desarrollador debe crear un objeto IDispatch que tenga la función de devolución de llamada como método predeterminado. En este tema se proporciona la información necesaria para desarrollar aplicaciones de Visual Basic.

Para implementar esta devolución de llamada en una aplicación

  1. Agregue referencias a dos bibliotecas de objetos: TLBTypes.olb y VboostTypes6.olb. Estas bibliotecas de objetos se proporcionan con el código de ejemplo de punto de control.

  2. Agregue una referencia a Cbklib.tlb. Este archivo define la estructura de la función de devolución de llamada.

    El cbklib.tlb se crea mediante el archivo cbklib.idl que se incluye como parte del código de ejemplo de punto de control. Se recomienda que el nombre de este cambio de archivo para las funciones de devolución de llamada que difieren en la estructura de sus parámetros. En este ejemplo se usa MIDL para crear el archivo de biblioteca de tipos.

  3. Escriba la función de devolución de llamada. Los parámetros son los mismos que en el ejemplo de VBScript en Registro de una devolución de llamada. En este ejemplo se imprime una cadena cada vez que llega un evento.

    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. Agregue la función de devolución de llamada al objeto IUPnPService , como se muestra en el ejemplo siguiente, o en otro objeto como IUPnPDeviceFinder, mediante la biblioteca de tipos de devolución de llamada adecuada (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
    

En el ejemplo siguiente, el objeto IUPnPService se pasa a la función . A continuación, la función de devolución de llamada se agrega como 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 en el código de ejemplo

Los ejemplos anteriores y el código de ejemplo de punto de control usan algunas de las siguientes bibliotecas de objetos:

  1. TLBTypes.olb: esta biblioteca define algunos de los tipos de biblioteca de tipos e interfaces que se usan en el código de ejemplo. Define algunas de las funciones que se usarán en Visual Basic, como LoadTypeLibEx, que ya están disponibles en C o C++.
  2. VboostTypes6.olb: esta biblioteca define algunos tipos base que se usan en TLBTypes.olb y FunctionDelegator.bas. Puede encontrar más información sobre TLBTypes en el libro Advanced Visual Basic 6: Power Techniques for Daily Programs, de Matthew Curland (Addison-Wesley, julio de 2000, ISBN: 0-201-70712-8). (Es posible que este libro no esté disponible en algunos idiomas y países).

El código de ejemplo del punto de control y las siguientes bibliotecas están relacionados con esta sección y son necesarios para implementar esta devolución de llamada. Se pueden encontrar con el código de ejemplo de punto de control:

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