【发布时间】: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