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