CORRECÇÃO: ScriptControl relatórios idioma inválido para o 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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. É oferecido "como está" e não será mais atualizado.
Sintomas
Ao hospedar o objeto ScriptControl em um aplicativo MFC, você pode receber o seguinte erro:
A operação não pôde ser concluída porque o mecanismo de script não foi inicializado para um idioma válido.
Isso ocorre mesmo que você anteriormente definir o idioma para o VBScript usando o método SetLanguage. Este erro não ocorre se você especificar JScript ou JavaScript como o idioma para o objeto ScriptControl.
Causa
Quando hospedado como um controle (e não apenas como um objeto de automação simples), o objeto ScriptControl Falha ao inicializar próprio corretamente se o idioma especificado é VBScript.
Resolução
Aqui estão duas soluções:
  • Limpe o idioma antes de defini-la:

    Adicione uma chamada para ScriptControl::SetLanguage(NULL) direita antes de chamar ScriptControl::SetLanguage("VBScript").
  • Automatizando o objeto ScriptControl:

    Como alternativa, os aplicativos que usam o ScriptControl podem alternar para automatizar o controle de script apenas como um objeto de automação em vez de um controle completo. Isso tem a vantagem de resolver o erro indicado por este artigo, bem como aprimorar desempenho. O aplicativo cliente não precisa percorrer a sobrecarga do ActiveX controle hospedagem negociação, que é essencialmente desnecessária para o não-interface do usuário script controle.
Abaixo é um trecho de código de exemplo que usa o Visual C++ 5.0 COM suporte para CoCreateInstance facilmente o ScriptControl e ativá-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());   }}				
Situação
A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo. Esse bug foi corrigido no Microsoft Internet Explorer 5.
Mais Informações

Etapas para reproduzir o problema

  1. Crie um novo aplicativo MFC SDI com o padrão AppWizard configurações, incluindo suporte a controles ActiveX.
  2. Insira o ScriptControl selecionando "ScriptControl objeto" da pasta "Registrado ActiveX Controls" sob o Project\Add para item de menu Project\Components e controles. Aceite todos os padrões em caixas de diálogo que se seguem.
  3. No método OnInitialUpdate do modo de exibição, 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 script de controle de arquivo de classe, scriptcontrol.h, para o modo de exibição e # definir ID_SCRIPT_CONTROL no seu Resource.h. Criar e executar o aplicativo.
Referências
Para obter informações adicionais, consulte os seguintes artigos na Base de dados de Conhecimento Microsoft:
184904ARQUIVO: Arquivo de controle cabeçalho MSSCPCTL.EXE script MSSCPCTL.H
Para obter informações adicionais, consulte o seguinte URL de Web:
Controle 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