Oprava: ScriptControl sestavy neplatný jazyk pro VBScript MFC

Překlady článku Překlady článku
ID článku: 184977 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Hostitelem ScriptControl objektu v aplikaci MFC, může se zobrazit následující chyba:
Operaci nelze dokončit, protože nebyla inicializována skriptovací stroj jazyka platný.
K tomu dochází, přestože dříve nastavíte jazyk VBScript pomocí metody SetLanguage. Této chybě nedochází, pokud zadat JScript nebo JavaScript jako jazyk pro objekt ScriptControl.

Příčina

Při hostitelem jako ovládací prvek (a stejně jednoduché automatizace objektu), objekt ScriptControl nezdaří inicializovat samotný správně, pokud zadaný jazyk je VBScript.

Řešení

Zde jsou dva řešení:
  • Před nastavením jej vymazat jazyk:

    Přidat volání ScriptControl::SetLanguage(NULL) vpravo před voláním ScriptControl::SetLanguage("VBScript").
  • Automatizace objektu ScriptControl:

    Aplikace, které používají ScriptControl můžete případně přepněte do automatizace ovládací Script stejně jako objekt automatizace, nikoli jako ovládací prvek full-blown. Tato možnost má výhod řešení chyb označeny tohoto článku stejně jako zlepšení výkonu. Klientské aplikace nemusí projít režii ActiveX řízení hostitelem vyjednávání, která je v podstatě zbytečné pro non-UI Script Control.
Níže je kámen ukázkový kód, používá Visual C++ 5.0 COM podporují snadno CoCreateInstance ScriptControl a aktivovat jej.

Ukázkový kód

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

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o chybu v produktech společnosti uvedených na začátku tohoto článku. Tato chyba byla opravena v aplikace Internet Explorer 5.

Další informace

Kroky pro reprodukci chování

  1. Vytvoření nové aplikace MFC SDI s výchozím nastavení AppWizard, včetně podpory pro ovládací prvky ActiveX.
  2. Vložit ScriptControl výběrem "ScriptControl objekt" z "Registrované ActiveX Controls" složky pod Project\Add Project\Components a prvky položky nabídky. Přijmout všechny výchozí hodnoty dialogy postupujte.
  3. V metodě OnInitialUpdate zobrazení, vložte následující kód:
    // 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. Přidat pro nový ovládací prvek třídy souboru skriptu, Scriptcontrol.h, do zobrazení zahrnout # a # define ID_SCRIPT_CONTROL ve vaší Resource.h. Sestavit a spustit aplikaci.

Odkazy

Další informace naleznete v následujícím článku v Knowledge Base:
184904FILE: Soubor záhlaví ovládacích MSSCPCTL.EXE skriptu MSSCPCTL.H
Další informace naleznete v tématu následující URL webu:
http://msdn2.microsoft.com/en-us/library/ms950396.aspx

Vlastnosti

ID článku: 184977 - Poslední aktualizace: 8. srpna 2007 - Revize: 2.2
Informace v tomto článku jsou určeny pro produkt:
  • Visual Basic, Scripting Edition 3.0
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Klíčová slova: 
kbmt kbbug kbfix kbie500fix KB184977 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:184977
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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