CORRECÇÃO: ScriptControl relatórios idioma inválido para o VBScript no MFC

Traduções deste artigo Traduções deste artigo
ID do artigo: 184977 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

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:
http://msdn2.microsoft.com/en-us/library/ms950396.aspx

Propriedades

ID do artigo: 184977 - Última revisão: quarta-feira, 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 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
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

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