CORRECTIF : Rapports ScriptControl de langage non pour VBScript dans MFC

Traductions disponibles Traductions disponibles
Numéro d'article: 184977 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lors de l'hébergement de l'objet ScriptControl dans une application MFC, le message d'erreur suivant peut s'afficher :
L'opération a échoué car le moteur de script n'a pas été initialisé à un langage valide.
Cela se produit même si vous précédemment défini le langage VBScript à l'aide de la méthode SetLanguage. Cette erreur ne se produit pas si vous spécifiez JScript ou JavaScript comme langage pour l'objet ScriptControl.

Cause

Lorsqu'il est hébergé comme un contrôle (et pas seulement en tant qu'objet automation simple), l'objet ScriptControl ne parvient pas à s'initialiser correctement si la langue spécifiée est VBScript.

Résolution

Voici deux solutions de contournement :
  • Désactivez la langue avant de le définir :

    Ajoutez un appel à ScriptControl::SetLanguage(NULL) droite avant d'appeler ScriptControl::SetLanguage("VBScript").
  • Automatisation de l'objet ScriptControl :

    Vous pouvez également les applications qui utilisent le ScriptControl peuvent basculer vers l'automatisation du contrôle de script simplement comme un objet automation plutôt que comme un contrôle complet. Cela présente l'avantage de résoudre le bogue indiqué par cette article ainsi que l'amélioration des performances. L'application client n'a pas besoin de passer par la surcharge de l'ActiveX contrôle héberger négociation, qui est essentiellement inutile pour les non-interface utilisateur contrôle de script.
Ci-dessous est un exemple de code qui utilise COM de Visual C++ 5.0 prend en charge à CoCreateInstance facilement la ScriptControl et l'activer.

Exemple de code

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

Statut

Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés au début de cet article. Ce bogue a été corrigé dans Microsoft Internet Explorer 5.

Plus d'informations

Procédure pour reproduire le problème

  1. Créez une application MFC SDI avec la valeur par défaut paramètres AppWizard, y compris la prise en charge des contrôles ActiveX.
  2. Insérer la ScriptControl en sélectionnant «ScriptControl objet» à partir du dossier «Registered ActiveX Controls» sous le Project\Add à élément de menu Project\Components et contrôles. Acceptez toutes les valeurs par défaut sur les boîtes de dialogue qui suivent.
  3. Dans la méthode OnInitialUpdate de la vue, insérez le code suivant :
    // 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. Ajoutez un # include pour le nouveau script contrôle fichier de classe, scriptcontrol.h, à l'affichage et # define ID_SCRIPT_CONTROL dans votre fichier Resource.h. Générez et exécutez l'application.

Références

Pour plus d'informations, consultez l'article suivant dans la base de connaissances Microsoft :
184904FILE : Fichier d'en-tête de contrôle de script MSSCPCTL.EXE MSSCPCTL.H
Pour plus d'informations, consultez l'URL de site Web suivant :
http://msdn2.microsoft.com/en-us/library/ms950396.aspx

Propriétés

Numéro d'article: 184977 - Dernière mise à jour: mercredi 8 août 2007 - Version: 2.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Visual Basic, Scripting Edition 3.0
  • Microsoft Visual C++ 5.0 Édition Entreprise
  • Microsoft Visual C++ 5.0 Édition Professionnelle
Mots-clés : 
kbmt kbbug kbfix kbie500fix KB184977 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 184977
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

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