CORRECÇÃO: Relatórios ScriptControl idiomas inválido para VBScript no MFC

Traduções de Artigos Traduções de Artigos
Artigo: 184977 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando hospedar o objecto ScriptControl uma aplicação MFC, poderá receber o seguinte erro:
Não foi possível concluir a operação porque o motor de script não foi inicializado para um idioma válido.
Isto ocorre mesmo que definiu anteriormente o idioma para VBScript utilizando o método SetLanguage. Este erro não ocorre se especificar JScript ou JavaScript como o idioma para o objecto ScriptControl.

Causa

Quando alojado como um controlo (e não apenas como um objecto de automatização simples), o objecto ScriptControl Falha ao inicializar-se correctamente se o idioma especificado é VBScript.

Resolução

Seguem-se duas soluções:
  • Limpe o idioma antes de defini-la:

    Adicione uma chamada para ScriptControl::SetLanguage(NULL) imediatamente antes de chamar ScriptControl::SetLanguage("VBScript").
  • Automatizar o objecto ScriptControl:

    Em alternativa, as aplicações que utilizam o ScriptControl podem mudar para automatizar o controlo de scripts tal como um objecto de automatização em vez de um controlo full-blown. Isto tem a vantagem de resolver o erro indicado neste artigo, bem como melhorar desempenho. A aplicação cliente não é necessário percorrer a sobrecarga do ActiveX do controlo que hospeda negociação, que é essencialmente desnecessária para os não-interface de utilizador Script Control.
Abaixo é um pedaço de código de exemplo que utiliza o Visual C++ 5.0 COM suporte para CoCreateInstance facilmente o ScriptControl e activá-lo.

Código de exemplo

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

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo. Este erro foi corrigido no Microsoft Internet Explorer 5.

Mais Informação

Passos para reproduzir o comportamento

  1. Crie uma nova aplicação MFC SDI com as predefinições AppWizard definições, incluindo suporte para controlos ActiveX.
  2. Insira o ScriptControl seleccionando ScriptControl "objecto" da pasta "Registado ActiveX Controls" sob o Project\Add Project\Components e controlos de item de menu. Aceite todas as predefinições em caixas de diálogo que se seguem.
  3. Método OnInitialUpdate da vista, insira o seguinte código:
    // 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. Adicione um # incluir para o novo controlo classe ficheiro de script, Scriptcontrol.h, para a vista e # definir ID_SCRIPT_CONTROL no seu Resource.h. Criar e executar a aplicação.

Referências

Para obter informações adicionais, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
184904FICHEIRO: Ficheiro de cabeçalho controlo MSSCPCTL.EXE script MSSCPCTL.H
Para obter informações adicionais, consulte o seguinte URL na World Wide Web:
http://msdn2.microsoft.com/en-us/library/ms950396.aspx

Propriedades

Artigo: 184977 - Última revisão: 8 de agosto de 2007 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • Visual Basic, Scripting Edition 3.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Palavras-chave: 
kbmt kbbug kbfix kbie500fix KB184977 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 184977
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

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