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

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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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:
Controlo de Script ScriptControl kbScript

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 184977 - Última Revisão: 12/05/2015 08:37:24 - Revisão: 2.2

Visual Basic, Scripting Edition 3.0, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition

  • kbnosurvey kbarchive kbmt kbbug kbfix kbie500fix KB184977 KbMtpt
Comentários