HOWTO:捕获ActiveX Script Host中的运行时错误

翻译 2006年05月19日 11:01:00

翻译自: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

相关文章推荐

MFC在VS2008中开发ActiveX控件,运行时自带的容器在哪?

在VS2008中开发MFC ActiveX控件,开发完后,通常使用VS自带的容器ActiveX Control Test Container来运行ActiveX控件。此容器在VS安装后的文件中是找不到...

VS2008的程序,运行时遇到R6034错误:

An application has made an attempt to load the C runtime library without using a manifest.

VS2013运行时提醒签名错误

签名时出错: 未能对 XXX.exe 签名。长时间没有运行过得程序下容易出现这个错误,其实就是签名到期了,再添加即可。右击项目,选择属性在签名下选择创建测试证书,弹出输入密码对话框可以输入你所需要的密...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)