FIX: Report ScriptControl linguaggio non valido per VBScript in MFC

Traduzione articoli Traduzione articoli
Identificativo articolo: 184977 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando funge da host l'oggetto ScriptControl in un'applicazione MFC, è analogo il seguente errore:
Impossibile completare l'operazione perché il modulo di gestione di script non è stato inizializzato su una lingua valida.
Questo problema si verifica anche se è in precedenza impostare la lingua per VBScript utilizzando il metodo SetLanguage. Questo errore non si verifica se si specifica un JScript o JavaScript come la lingua per l'oggetto ScriptControl.

Cause

Se ospitato come controllo (e non come un oggetto di automazione semplice), l'oggetto ScriptControl non riesce a inizializzare correttamente se la lingua specificata è VBScript.

Risoluzione

Di seguito sono due soluzioni:
  • Prima di impostarla, cancellare la lingua:

    Consente di aggiungere una chiamata a ScriptControl::SetLanguage(NULL) diritto prima di chiamare ScriptControl::SetLanguage("VBScript").
  • L'oggetto ScriptControl di automazione:

    In alternativa, le applicazioni che utilizzano il ScriptControl possono passare per automatizzare il controllo script solo come un oggetto di automazione anziché come un controllo completo. Questo ha il vantaggio di risoluzione del bug indicato da questo articolo, nonché il potenziamento delle prestazioni. L'applicazione client non è necessario passare attraverso il sovraccarico di ActiveX controllo hosting negoziazione, che è essenzialmente necessario per il non UI script controllo.
Di seguito è una parte del codice di esempio che utilizza COM di Visual c ++ 5.0 supporta a CoCreateInstance facilmente il ScriptControl e attivarlo.

Codice di esempio

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

Status

Microsoft ha confermato che questo un bug nei prodotti Microsoft elencati all'inizio di questo articolo. Questo problema è stato risolto in Microsoft Internet Explorer 5.

Informazioni

Procedura per riprodurre il problema

  1. Creare una nuova applicazione di SDI di MFC con la predefinita impostazioni di creazione guidata applicazione, inclusi il supporto per i controlli ActiveX.
  2. Inserire il ScriptControl selezionando "ScriptControl oggetto" dalla cartella "Registrato ActiveX Controls" sotto il Project\Add a controlli e Project\Components voce di menu. Accettare tutte le impostazioni predefinite in finestre di dialogo che seguono.
  3. Nel metodo OnInitialUpdate della visualizzazione, inserire il codice seguente:
    // 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. Aggiungere # include per il nuovo controllo classe file di script, scriptcontrol.h, alla visualizzazione e # define ID_SCRIPT_CONTROL nel Resource.h. Compilare ed eseguire l'applicazione.

Riferimenti

Per ulteriori informazioni, consultare il seguente articolo della Microsoft Knowledge Base riportato di seguito:
184904FILE: Script MSSCPCTL.EXE controllo file di intestazione MSSCPCTL.H
Per ulteriori informazioni, vedere il seguente URL Web:
http://msdn2.microsoft.com/en-us/library/ms950396.aspx

Proprietà

Identificativo articolo: 184977 - Ultima modifica: mercoledì 8 agosto 2007 - Revisione: 2.2
Le informazioni in questo articolo si applicano a:
  • Visual Basic, Scripting Edition 3.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Chiavi: 
kbmt kbbug kbfix kbie500fix KB184977 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 184977
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilità per articoli della Microsoft Knowledge Base su prodotti non più supportati
Questo articolo è stato scritto sui prodotti per cui Microsoft non offre più supporto. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.

Invia suggerimenti

 

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