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