Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Добавление обратного вызова в 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, Мэтью Керленд (Addison-Wesley, июль 2000, ISBN: 0-201-70712-8). (Эта книга может быть недоступна на некоторых языках и странах.)
Пример кода точки управления и следующие библиотеки связаны с этим разделом и необходимы для реализации этого обратного вызова. Их можно найти вместе с образцом кода для Управляющей Точки.
- Cbklib.idl
- Cbklib.tlb
- VboostTypes6.olb
- TLBTypes.olb
- FunctionDelegator.bas