共用方式為


在 Visual Basic 中註冊回呼

在 Visual Basic 中新增回呼與 VBScript 中使用的方法不同。 VBScript 中使用的 GetRef 函式與 Visual Basic 中使用的函式不同。 因此,開發人員必須建立 IDispatch 物件,該物件具有回呼函式作為預設方法。 本主題提供開發 Visual Basic 應用程式的必要資訊。

在應用程式中實作此回呼

  1. 將參考新增至兩個物件程式庫:TLBTypes.olb 和 VboostTypes6.olb。 這些物件程式庫會隨附 Control Point 範例程式碼。

  2. 新增 Cbklib.tlb 的參考。 此檔案會定義回呼函式的結構。

    cbklib.tlb 是使用包含在控制點範例程式碼中的 cbklib.idl 檔案來建立。 建議針對其參數結構不同之回呼函式變更此檔案的名稱。 此範例會使用 MIDL 來建立類型程式庫檔案。

  3. 撰寫回呼函式。 參數與 註冊回呼中的 VBScript 範例相同。 此範例會在事件送達時列印字串。

    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. 使用適當的回呼類型程式庫,將回呼函式新增至 IUPnPService 物件,如下列範例所示,或在 IUPnPDeviceFinder等其他物件中,使用適當的回呼類型程式庫 (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
    

在下列範例中, IUPnPService 物件會傳遞至 函式。 然後,回呼函式會新增為 參數。

    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)

範例程式碼中使用的物件程式庫

上述範例和 Control Point 範例程式碼會使用下列一些物件程式庫:

  1. TLBTypes.olb — 此程式庫會定義範例程式碼中使用的一些類型程式庫類型和介面。 它會定義 Visual Basic 中使用的一些函式,例如 LoadTypeLibEx,這些函式已在 C 或 C++ 中使用。
  2. VboostTypes6.olb — 此程式庫會定義 TLBTypes.olb 和 FunctionDelegator.bas 中使用的一些基底類型。如需 TLBTypes 的進一步資訊,請參閱 進階 Visual Basic 6:每日程式的 Power 技術,作者:Foundation Curland (Addison-Wesley,2000 年 7 月,ISBN:0-201-70712-8) 。 (本書籍可能無法在某些語言和國家/地區中使用。)

控制點範例程式碼和下列程式庫與本節相關,而且需要實作此回呼。 您可以使用控制點範例程式碼找到:

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