Регистрация обратного вызова в Visual Basic
Добавление обратного вызова в Visual Basic отличается от метода, используемого в VBScript. Функция GetRef , используемая в VBScript, отличается от функции, используемой в Visual Basic. Поэтому разработчик должен создать объект IDispatch с функцией обратного вызова в качестве метода по умолчанию. В этом разделе содержатся сведения, необходимые для разработки приложений Visual Basic.
Реализация этого обратного вызова в приложении
Добавьте ссылки на две библиотеки объектов: TLBTypes.olb и VboostTypes6.olb. Эти библиотеки объектов предоставляются с примером кода контрольной точки.
Добавьте ссылку на Cbklib.tlb. Этот файл определяет структуру функции обратного вызова.
Cbklib.tlb создается с помощью файла cbklib.idl, включенного в пример кода контрольной точки. Рекомендуется изменить имя этого файла для функций обратного вызова, которые отличаются структурой параметров. В этом примере используется MIDL для создания файла библиотеки типов.
Напишите функцию обратного вызова. Параметры такие же, как в примере 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
Добавьте функцию обратного вызова в объект 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)
Библиотеки объектов, используемые в образце кода
В предыдущих примерах и примере кода контрольной точки используются некоторые из следующих библиотек объектов:
- TLBTypes.olb — эта библиотека определяет некоторые типы библиотек типов и интерфейсы, используемые в примере кода. Он определяет некоторые функции, которые будут использоваться в Visual Basic, например LoadTypeLibEx, которые уже доступны в C или C++.
- VboostTypes6.olb — эта библиотека определяет некоторые базовые типы, используемые в TLBTypes.olb и FunctionDelegator.bas. Дополнительные сведения о TLBTypes можно найти в книге Advanced Visual Basic 6: Power Techniques for Everyday Programs (Advanced Visual Basic 6: Power Techniques for Everyday Programs) (Мэтью Керленду(Мэтью Керленду) (Addison-Wesley, July 2000, ISBN: 0-201-70712-8). (Эта книга может быть недоступна на некоторых языках и в некоторых странах.)
Пример кода контрольной точки и следующие библиотеки относятся к этому разделу и необходимы для реализации этого обратного вызова. Их можно найти с помощью примера кода контрольной точки:
- Cbklib.idl
- Cbklib.tlb
- VboostTypes6.olb
- TLBTypes.olb
- FunctionDelegator.bas