Partager via


Inscription d’un rappel en Visual Basic

L’ajout d’un rappel en Visual Basic est différent de la méthode utilisée dans VBScript. La fonction GetRef utilisée dans VBScript est différente de celle utilisée dans Visual Basic. Par conséquent, un développeur doit créer un objet IDispatch qui a la fonction de rappel comme méthode par défaut. Cette rubrique fournit les informations nécessaires pour développer des applications Visual Basic.

Pour implémenter ce rappel dans une application

  1. Ajoutez des références à deux bibliothèques d’objets : TLBTypes.olb et VboostTypes6.olb. Ces bibliothèques d’objets sont fournies avec l’exemple de code Point de contrôle.

  2. Ajoutez une référence à Cbklib.tlb. Ce fichier définit la structure de la fonction de rappel.

    Le fichier cbklib.tlb est créé à l’aide du fichier cbklib.idl inclus dans l’exemple de code Point de contrôle. Il est recommandé que le nom de ce fichier change pour les fonctions de rappel qui diffèrent dans la structure de leurs paramètres. Cet exemple utilise MIDL pour créer le fichier de bibliothèque de types.

  3. Écrivez la fonction de rappel. Les paramètres sont les mêmes que dans l’exemple VBScript dans Inscription d’un rappel. Cet exemple montre comment imprimer une chaîne chaque fois qu’un événement arrive.

    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. Ajoutez la fonction de rappel à l’objet IUPnPService , comme illustré dans l’exemple suivant, ou dans un autre objet tel que IUPnPDeviceFinder, à l’aide de la bibliothèque de types de rappel appropriée (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
    

Dans l’exemple suivant, l’objet IUPnPService est passé à la fonction . La fonction de rappel est ensuite ajoutée en tant que paramètre.

    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)

Bibliothèques d’objets utilisées dans l’exemple de code

Les exemples précédents et l’exemple de code Point de contrôle utilisent certaines des bibliothèques d’objets suivantes :

  1. TLBTypes.olb : cette bibliothèque définit certains des types et interfaces de bibliothèque de types utilisés dans l’exemple de code. Il définit certaines des fonctions à utiliser en Visual Basic, telles que LoadTypeLibEx, qui sont déjà disponibles en C ou C++.
  2. VboostTypes6.olb : cette bibliothèque définit certains types de base utilisés dans TLBTypes.olb et FunctionDelegator.bas. Pour plus d’informations sur les TLBTypes, consultez le livre Advanced Visual Basic 6: Power Techniques for Everyday Programs, par Matthew Curland (Addison-Wesley, juillet 2000, ISBN : 0-201-70712-8). (Ce livre n’est peut-être pas disponible dans certaines langues et certains pays.)

L’exemple de code point de contrôle et les bibliothèques suivantes sont liées à cette section et sont nécessaires pour implémenter ce rappel. Vous pouvez les trouver avec l’exemple de code Point de contrôle :

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