REVISIÓN: Informes ScriptControl idioma no válido de VBScript en MFC

Seleccione idioma Seleccione idioma
Id. de artículo: 184977 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando se aloja el objeto ScriptControl en una aplicación MFC, puede recibir el siguiente error:
No se pudo completar la operación porque no se ha inicializado el motor de secuencias de comandos a un idioma válido.
Esto ocurre aunque se anteriormente establece el lenguaje VBScript mediante el método de SetLanguage. Este error no se produce si especificar JScript o JavaScript como idioma para el objeto ScriptControl.

Causa

Cuando está alojado como un control (y no sólo como un objeto de automatización simple), el objeto ScriptControl no inicialice correctamente si el idioma especificado es VBScript.

Solución

A continuación se describen dos soluciones:
  • Borrar el lenguaje antes de establecerla:

    Agregue una llamada a ScriptControl::SetLanguage(NULL) justo antes de llamar a ScriptControl::SetLanguage("VBScript").
  • Automatizar el objeto ScriptControl:

    Como alternativa, pueden cambiar las aplicaciones que utilizan el ScriptControl a automatizar el control de secuencias de comandos sólo como un objeto de automatización lugar de como un control completamente desarrollado. Esto tiene la ventaja de resolver el error indicado por este artículo, así como la mejora de rendimiento. La aplicación cliente no tiene que pasar por la sobrecarga de los controles de ActiveX control que aloja la negociación, que es esencialmente innecesaria para el no-IU script control.
A continuación es un fragmento de código de ejemplo que utiliza COM de Visual C++ 5.0 admite a CoCreateInstance fácilmente ScriptControl y activarla.

Código de ejemplo

// 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());
   }
}
				

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo. Este error se corrigió en Microsoft Internet Explorer 5.

Más información

Pasos para reproducir este comportamiento

  1. Crear una nueva aplicación de SDI de MFC con el valor predeterminado configuración de Asistente para aplicaciones, incluida la compatibilidad con los controles ActiveX.
  2. Inserte el ScriptControl seleccionando "ScriptControl objeto" desde la carpeta "Registrado ActiveX Controls" bajo la Project\Add Project\Components y controles de elemento de menú. Acepte todos los valores predeterminados en los cuadros de diálogo que siguen.
  3. En el método OnInitialUpdate de la vista, inserte el código siguiente:
    // 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. Agregar un # include para el nuevo control clase archivo de comandos, scriptcontrol.h, a la vista y # define ID_SCRIPT_CONTROL en su Resource.h. Genere y ejecute la aplicación.

Referencias

Para obtener información adicional, consulte los siguientes artículos de Microsoft Knowledge Base:
184904FILE: Archivo de encabezado de control de script MSSCPCTL.EXE MSSCPCTL.H
Para obtener información adicional, vea la siguiente dirección URL de Web:
http://msdn2.microsoft.com/en-us/library/ms950396.aspx

Propiedades

Id. de artículo: 184977 - Última revisión: miércoles, 08 de agosto de 2007 - Versión: 2.2
La información de este artículo se refiere a:
  • Visual Basic, Scripting Edition 3.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional
Palabras clave: 
kbmt kbbug kbfix kbie500fix KB184977 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 184977
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

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