Registrazione di un callback in Visual Basic
L'aggiunta di un callback in Visual Basic è diversa dal metodo usato in VBScript. La funzione GetRef usata in VBScript è diversa da quella usata in Visual Basic. Pertanto, uno sviluppatore deve creare un oggetto IDispatch con la funzione di callback come metodo predefinito. In questo argomento vengono fornite le informazioni necessarie per sviluppare applicazioni Visual Basic.
Per implementare questo callback in un'applicazione
Aggiungere riferimenti a due librerie di oggetti: TLBTypes.olb e VboostTypes6.olb. Queste librerie di oggetti vengono fornite con il codice di esempio del punto di controllo.
Aggiungere un riferimento a Cbklib.tlb. Questo file definisce la struttura della funzione di callback.
Il file cbklib.tlb viene creato usando il file cbklib.idl incluso come parte del codice di esempio del punto di controllo. È consigliabile modificare il nome di questo file per le funzioni di callback che differiscono nella struttura dei relativi parametri. In questo esempio viene utilizzato MIDL per creare il file della libreria dei tipi.
Scrivere la funzione di callback. I parametri sono gli stessi dell'esempio VBScript in Registrazione di un callback. In questo esempio viene stampata una stringa ogni volta che arriva 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
Aggiungere la funzione di callback all'oggetto IUPnPService , come illustrato nell'esempio seguente o in un altro oggetto, ad esempio IUPnPDeviceFinder, usando la libreria dei tipi di callback appropriata (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
Nell'esempio seguente l'oggetto IUPnPService viene passato alla funzione . La funzione di callback viene quindi aggiunta come parametro .
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)
Librerie di oggetti usate nel codice di esempio
Gli esempi precedenti e il codice di esempio del punto di controllo usano alcune delle librerie di oggetti seguenti:
- TLBTypes.olb: questa libreria definisce alcuni tipi e interfacce della libreria dei tipi usati nel codice di esempio. Definisce alcune delle funzioni da usare in Visual Basic, ad esempio LoadTypeLibEx, già disponibili in C o C++.
- VboostTypes6.olb: questa libreria definisce alcuni tipi di base usati in TLBTypes.olb e FunctionDelegator.bas. Ulteriori informazioni su TLBTypes sono disponibili nel libro Advanced Visual Basic 6: Power Techniques for Everyday Programs, di Matthew Curland (Addison-Wesley, Luglio 2000, ISBN: 0-201-70712-8). Questo libro potrebbe non essere disponibile in alcune lingue e paesi.
Il codice di esempio del punto di controllo e le librerie seguenti sono correlati a questa sezione e sono necessari per implementare questo callback. Sono disponibili con il codice di esempio del punto di controllo:
- Cbklib.idl
- Cbklib.tlb
- VboostTypes6.olb
- TLBTypes.olb
- FunctionDelegator.bas