Freigeben über


Registrieren eines Rückrufs in Visual Basic

Das Hinzufügen eines Rückrufs in Visual Basic unterscheidet sich von der in VBScript verwendeten Methode. Die in VBScript verwendete GetRef-Funktion unterscheidet sich von der in Visual Basic verwendeten Funktion. Daher muss ein Entwickler ein IDispatch-Objekt erstellen, das über die Rückruffunktion als Standardmethode verfügt. Dieses Thema enthält die erforderlichen Informationen zum Entwickeln von Visual Basic-Anwendungen.

So implementieren Sie diesen Rückruf in einer Anwendung

  1. Fügen Sie Verweise auf zwei Objektbibliotheken hinzu: TLBTypes.olb und VboostTypes6.olb. Diese Objektbibliotheken werden mit dem Control Point-Beispielcode bereitgestellt.

  2. Fügen Sie einen Verweis auf Cbklib.tlb hinzu. Diese Datei definiert die Struktur der Rückruffunktion.

    Die cbklib.tlb wird mithilfe der Datei cbklib.idl erstellt, die als Teil des Control Point-Beispielcodes enthalten ist. Es wird empfohlen, den Namen dieser Datei für Rückruffunktionen zu ändern, die sich in der Struktur ihrer Parameter unterscheiden. In diesem Beispiel wird MIDL verwendet, um die Typbibliotheksdatei zu erstellen.

  3. Schreiben Sie die Rückruffunktion. Die Parameter sind mit denen im VBScript-Beispiel unter Registrieren eines Rückrufs identisch. In diesem Beispiel wird eine Zeichenfolge ausgegeben, wenn ein Ereignis eintrifft.

    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. Fügen Sie die Rückruffunktion dem IUPnPService-Objekt hinzu, wie im folgenden Beispiel gezeigt, oder in einem anderen Objekt wie IUPnPDeviceFinder mithilfe der entsprechenden Rückruftypbibliothek (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
    

Im folgenden Beispiel wird das IUPnPService-Objekt an die Funktion übergeben. Die Rückruffunktion wird dann als Parameter hinzugefügt.

    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)

Objektbibliotheken, die im Beispielcode verwendet werden

In den vorherigen Beispielen und im Control Point-Beispielcode werden einige der folgenden Objektbibliotheken verwendet:

  1. TLBTypes.olb – Diese Bibliothek definiert einige der Typbibliothekstypen und Schnittstellen, die im Beispielcode verwendet werden. Es definiert einige der Funktionen, die in Visual Basic verwendet werden sollen, z . B. LoadTypeLibEx, die bereits in C oder C++ verfügbar sind.
  2. VboostTypes6.olb – Diese Bibliothek definiert einige Basistypen, die in TLBTypes.olb und FunctionDelegator.bas verwendet werden. Weitere Informationen zu TLBTypes finden Sie im Buch Advanced Visual Basic 6: Power Techniques for Everyday Programs von Matthew Curland (Addison-Wesley, Juli 2000, ISBN: 0-201-70712-8). (Dieses Buch ist in einigen Sprachen und Ländern möglicherweise nicht verfügbar.)

Der Control Point-Beispielcode und die folgenden Bibliotheken beziehen sich auf diesen Abschnitt und sind erforderlich, um diesen Rückruf zu implementieren. Sie finden Sie mit dem Control Point-Beispielcode:

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