VBScript 中的 COM 事件处理程序

问题描述 投票:0回答:1

我想捕获

NewCivicAddressReport
事件,这意味着我需要实现事件处理程序。谁能解释为什么嵌入在 HTML 页面中的 VBScript 代码可以工作,但 VBS 文件却不能?

这是 HTML 页面,可以在

NewCivicAddressReport
函数中处理
CivicFactory_NewCivicAddressReport()
事件。我想这是因为事件处理程序命名约定。如果我错了请纠正我。

<body onload = "OnLoadPage()"; 
  onunload = "CivicFactory.StopListeningForReports()">

    <!-- Civic address Location report factory object -->
    <object id="CivicFactory" 
        classid="clsid:2A11F42C-3E81-4ad4-9CBE-45579D89671A"
        type="application/x-oleobject">
    </object>                 
    
    <script language="vbscript">

    Function CivicFactory_NewCivicAddressReport(report)
        MsgBox "New civic address report!"
    End Function
    
    Sub OnLoadPage()
        CivicFactory.ListenForReports(1000)
    End Sub
    
    Sub DisplayStatus(status)
        MsgBox "status displayed"
    End Sub
    
    </script>
</body>

下面是不起作用的 VBS 文件 - 事件处理函数似乎永远不会被调用。

Dim CivicFactory
Set CivicFactory = WScript.CreateObject("LocationDisp.CivicAddressReportFactory")

Function CivicFactory_NewCivicAddressReport(report)
    MsgBox "Location changed!"
    keepSleeping=false
End Function

CivicFactory.ListenForReports(1000)
    
dim keepSleeping
keepSleeping=true
while keepSleeping
    WScript.Sleep 200
wend

顺便问一下,谁能告诉我创建对象的两种方法之间的区别:

<object id=...></object>
WScript.CreateObject()

提前致谢!

events vbscript event-handling com
1个回答
5
投票

WScript.CreateObject
的第二个参数是事件处理函数中使用的前缀。要使其正常工作,请将对 CreateObject 的调用更改为以下内容。

Set CivicFactory = _
    WScript.CreateObject("LocationDisp.CivicAddressReportFactory", _
        "CivicFactory_")

WScript.CreateObject 和 CreateObject 之间的区别在于 WScript.CreateObject 支持事件。

© www.soinside.com 2019 - 2024. All rights reserved.