【问题标题】:Using callback functions in vbscript在 vbscript 中使用回调函数
【发布时间】:2011-10-12 19:04:40
【问题描述】:

我正在尝试在 vbscript 中为 windows7 制作更新脚本

在调用IUpdateSearcher::BeginSearch 时,如何将回调传递给ISearchCompletedCallback::Invoke Method

我对这点一无所知:

  • 我是否需要一个函数或子对象,或者这是一个带有调用方法的自定义对象(以及如何创建)
  • 我需要如何传递回调
  • 在 vbscript 中是否有可能(如果没有,下一步是什么?)

谢谢

【问题讨论】:

标签: winapi vbscript callback


【解决方案1】:

我从未尝试过,但我会看看ConnectObject 方法。 这个关于脚本事件的article 也可能有用。

所以可能是这样的(完全猜测):

Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
WScript.ConnectObject objSearcher, "searcherCallBack_"
objSearcher.BeginSearch ...


sub searcherCallBack_Invoke()
    ' handle the callback
end sub

我还建议阅读 Guidelines for Asynchronous WUA Operations 以确保您自己清理干净。
该链接还提到使用Windows Script Host,因此绝对可以这样做,但除非您需要它是异步的,否则同步方法可能会更容易。

【讨论】:

  • 谢谢,看起来很有前途,今晚我回家后告诉你
  • 它看到我不需要连接到 UpdateSearcher,而是连接到一个名为 ISearchCompletedCallback 的(新?)接口并将其作为 arg 传递? (顺便说一句,我更新了链接抱歉)(也检查我的粘贴)
  • VBScript 以自动化接口(IDispatch、IProvideClassInfo 和所有爵士乐)为目标。我认为这不适用于 IUpdateSearcher。 (更多:blogs.msdn.com/b/ericlippert/archive/2005/09/21/472465.aspx
  • 好的,这个(来自msdn)As an alternative to implementing the ISearchCompletedCallback interface, you can use a script to implement a callback routine of any identifier with DISPID 0 on an automation object. The type of the onCompleted parameter is IUnknown*.可以控制dispid(后期状态绑定??)形式vbscript
  • @borrel:听起来很有希望,但正如我所说,我从未真正尝试过,所以恐怕无法提供更好的帮助。