【问题标题】:COM event handling works in VBScript but not Javascript (JScript)COM 事件处理适用于 VBScript 但不适用于 Javascript (JScript)
【发布时间】:2019-09-15 21:26:47
【问题描述】:

我编写了一个实现 COM 和脚本的应用程序。调用方法适用于 VBScript 和 JavaScript (JScript),但事件处理仅适用于 VBScript。

COM 对象称为 Ftp,它有一个方法“display”和一个在启动脚本引擎时触发的事件“Main”。 我能找到的答案主要是网页,而不是简单的脚本。

工作 VBScript:

Ftp.display 2,"VBScript started"&vbNewLine

Sub Ftp_Main()
    Ftp.display 12,"Main event fired"&vbNewLine
End Sub

显示:

VBScript 已启动

主事件触发

不工作的 JavaScript:

Ftp.display(2,"JavaScript started\n");

function Ftp::Main()
{
    Ftp.display(4,"Main event fired!\n");
}

仅显示“JavaScript 已启动”。

我认为问题不在于 JScript 语法,而在于我的脚本主机实现。我调试了在 VBScript 和 JScript 的情况下如何调用脚本宿主,并注意到以下差异: 在 VBScript 的情况下 AutoProxy::XActiveScriptSite::GetItemInfo() 被调用 dwReturnMask==SCRIPTINFO_IUNKNOWN 然后 dwReturnMask==SCRIPTINFO_ITYPEINFO。之后调用 AutoProxy::XMyContainer::FindConnectionPoint()。 在 JScript 案例中,不调用 AutoProxy::XActiveScriptSite::GetItemInfo(SCRIPTINFO_ITYPEINFO),也不调用 AutoProxy::XMyContainer::FindConnectionPoint()。 因此,在事件代码中 pConPt->GetStartPosition() 返回 NULL 也就不足为奇了。 我一直找不到任何 JScript 事件起作用的非托管代码。

【问题讨论】:

    标签: javascript com event-handling


    【解决方案1】:

    Gerrtvn 探针将 Ftp::Main 更改为 Ftp_Main

    ps:我认为 Gerrtvn 你来自 C++ 世界。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多