有关 MFC 中的 VBScript 的 FIX: ScriptControl 报告无效语言

文章翻译 文章翻译
文章编号: 184977 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当宿主 ScriptControl 对象在 MFC 应用程序中的,您可能会收到以下错误:
无法完成该操作,因为脚本引擎尚未初始化,不能为有效的语言。
即使您以前设置语言为 VBScript 使用 SetLanguage 方法,将发生这种情况。如果您指定 JScript 或 JavaScript 为语言 ScriptControl 对象的不会发生此错误。

原因

时承载作为控件 (并不只是作为简单的自动化对象),ScriptControl 对象将无法正确初始化本身,如果指定的语言是 VBScript。

解决方案

下面是两种解决方法:
  • 设置它之前清除该语言,请执行以下操作:

    右在调用 ScriptControl::SetLanguage("VBScript") 之前添加 ScriptControl::SetLanguage(NULL) 的调用。
  • 自动化 ScriptControl 对象:

    或者,使用该 ScriptControl 的应用程序可以切换到自动执行脚本控制只是用作自动化对象而不是一个全面的控件。此项的解决 bug 指示此文章以及提高性能的优点。客户端应用程序不需要的 ActiveX 开销通过承载协商,这是不实质上是必要的非-用户界面脚本控件的控件。
下面是一段示例代码使用 Visual c + + 5.0 COM 支持来轻松地 CoCreateInstance 该 ScriptControl,并将其激活。

示例代码

// Import Type Info from Script OCX - point path to the
// location of the Script Control on your development computer.
#import "C:\Program Files\Microsoft Script Control\msscript.ocx"

void CScrptctrlView::OnInitialUpdate()
{
   CView::OnInitialUpdate();

   OleInitialize(NULL); // Only if you haven't done this already
                        // or called AfxOleInit.
   using namespace MSScriptControl;
   try  // Make sure exception handling is turned on.
   {
      _bstr_t bstrLanguage(L"VBScript");
      _bstr_t bstrCode(L"MsgBox \"Hello World\"");

      // Create the Script Control, initialize Language, and
      // add code for processing.
      IScriptControlPtr spScriptCtl(__uuidof(ScriptControl));
      spScriptCtl->put_Language(bstrLanguage);
      spScriptCtl->AddCode(bstrCode);
   }
   catch(_com_error e)
   {
      TRACE(_T("Error (%08x) in %s: %s\n"), e.Error(),
                           e.Source(), e.Description());
   }
}
				

状态

Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中的错误。在 Microsoft Internet 浏览器 5 中,此缺陷已得到纠正。

更多信息

重现行为的步骤

  1. 默认情况下使用包括支持 ActiveX 控件的应用程序向导设置创建新的 MFC SDI 应用程序。
  2. 通过选择"ScriptControl 对象"从"已注册的 ActiveX 控件"文件夹下该 Project\Add Project\Components 和控件的菜单项以插入该 ScriptControl。接受所有默认设置,请按照这些对话框上。
  3. 在视图 OnInitialUpdate 方法中插入以下代码:
    // Import Type Info from Script OCX - point path to the
    // location of the Script Control on your development computer.
    #import "C:\Program Files\Microsoft Script Control\msscript.ocx"
    
    void CScrptctrlView::OnInitialUpdate()
    {
      CView::OnInitialUpdate();
    
      OleInitialize(NULL); // Only if you haven't done this already
                           // or called AfxOleInit.
      using namespace MSScriptControl;
      try  // Make sure exception handling is turned on.
      {
         _bstr_t bstrLanguage(L"VBScript");
         _bstr_t bstrCode(L"MsgBox \"Hello World\"");
    
         // Create the Script Control, initialize Language, and
         // add code for processing.
         IScriptControlPtr spScriptCtl(__uuidof(ScriptControl));
         spScriptCtl->put_Language(bstrLanguage);
         spScriptCtl->AddCode(bstrCode);
      }
      catch(_com_error e)
      {
         TRACE(_T("Error (%08x) in %s: %s\n"), e.Error(),
                              e.Source(), e.Description());
      }
    }
    						
  4. 添加新脚本控件的类文件,Scriptcontrol.h,到视图中包含 # 和 # define ID_SCRIPT_CONTROL 您 Resource.h 中。生成并运行该应用程序。

参考

有关更多的信息,请参阅下列文章 Microsoft 知识库中相应:
184904FILE: MSSCPCTL.EXE 脚本控件头文件 MSSCPCTL.H
有关更多的信息,请参阅下面的万维网 URL:
http://msdn2.microsoft.com/en-us/library/ms950396.aspx

属性

文章编号: 184977 - 最后修改: 2007年8月8日 - 修订: 2.2
这篇文章中的信息适用于:
  • Visual Basic,Scripting Edition 3.0
  • Microsoft Visual C++ 5.0 企业版
  • Microsoft Visual C++ 5.0 专业版
关键字:?
kbmt kbbug kbfix kbie500fix KB184977 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 184977
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com