翻译自:Knowledge Base:Q232394
摘要:
如同所有的程序,在ActiveX Script Host中运行的脚本,能抛出两种类型的错误:编译时错误、运行时错误。由Micosoft提供的ActiveX Script Engines(VBScript/JScript), 在早期的实现中对这两种错误的处理没有区别,均由IActiveScriptSite::OnScriptError()来处理。随着更多Script engines新版本的出现,运行时错误与编译时错误之间的区别也产生了。编译时错误,例如语法错误,仍然报告给ActiveX Script Host,通过IActiveScriptSite::OnScriptError()来处理。然而,运行时错误,例如传入无效的参数,不直接报告给OnScriptError(),而是报告给另一个方法IActiveScriptSiteDebug::OnScriptErrorDebug().
这篇文章将描述如何修改ActiveX Script Host,以便捕获由脚本抛出的运行时错误。
详细内容:
在这里,假设你已经编写了一个ActiveX Script Host。有关更多的信息请参见本文参考区列出的文章。
在脚本引擎的最新发行版中,当一个运行时错误发生时,IActiveScriptSiteDebug::OnScriptErrorDebug将被调用。IActiveScriptSiteDebug接口提供Script Host一个机会,在debugger被调出之前参与调试工作。为了在运行时错误发生时Script Host能得到通知,需要IActiveScriptSiteDebug接口的最小实现。
当IActiveScript::SetScriptSite方法被调用时,Script Engine将通过host的IActiveScriptSite指针查询IActiveScriptSiteDebug接口。如果失败,Script engine将尝试联系自己的脚本调试器。然而,如果查询成功,Script engine将调用IActiveScriptSiteDebug::GetApplication()为本次会话建立调试工具。如果IActiveScriptSiteDebug::GetApplication()失败,Script engine将断定在本机调试不可用,从而返回到IActiveScriptSite::OnScriptError()进行所有的错误处理。
下面是IActiveScriptSiteDebug接口的最小实现:
STDMETHOD GetDocumentContextFromPosition(
DWORD dwSourceContext,
ULONG uCharacterOffset,
ULONG uNumChars,
IDebugDocumentContext **ppsc) {return E_NOTIMPL;}
STDMETHOD GetApplication( IDebugApplication **ppda ) {return E_NOTIMPL;}
STDMETHOD GetRootApplicationNode( IDebugApplicationNode **ppdanRoot) {return E_NOTIMPL;}
STDMETHOD OnScriptErrorDebug(
IActiveScriptErrorDebug *pErrorDebug,
BOOL *pfEnterDebugger,
BOOL *pfCallOnScriptErrorWhenContinuing) {return E_NOTIMPL;}
当然,Script Host可以选择IActiveScriptSiteDebug接口的一个较复杂的实现。有关IActiveScriptSiteDebug接口和实现的文章,请参见:
http://msdn.microsoft.com/scripting ,并选择Hosing Information/Documentation/Windows Script Debugging。Smart Host专区描述如何实现IActiveScriptSiteDebug接口。
参考:
有关生成Active Script Host的更多信息,请参见下面列出的Microsoft Knowledge Base文章:
Q223139 HOWTO: Add Support for Hosting VBScript to an ATL Application
Q183698 SAMPLE: AXSH.exe Demonstrates Implementing ActiveX Script Hosts
Q168214 SAMPLE: MFCAxs.exe Implements an ActiveX Script Host Using MFC
Q223389 FILE: Scriptng.exe Contains the Files Necessary for Implementing ActiveX Script Hosts and Engines