ΕΝΗΜΕΡΩΣΗ: ScriptControl εκθέσεις μη έγκυρη γλώσσα για τη VBScript σε MFC

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 184977 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Όταν φιλοξενείτε το αντικείμενο ScriptControl μιας εφαρμογής MFC, ενδέχεται να λάβετε το ακόλουθο μήνυμα λάθους:
Δεν ήταν δυνατή η ολοκλήρωση της λειτουργίας επειδή δεν έχει γίνει προετοιμασία του μηχανισμού δέσμης ενεργειών σε μια έγκυρη γλώσσα.
Αυτό συμβαίνει ακόμα και αν προηγουμένως ορίζετε τη γλώσσα VBScript χρησιμοποιώντας τη μέθοδο SetLanguage. Αυτό το σφάλμα δεν παρουσιάζεται εάν καθορίσετε JScript ή JavaScript με τη γλώσσα για το αντικείμενο ScriptControl.

Αιτία

Όταν διατηρείται ως στοιχείο ελέγχου (και όχι μόνο ως αντικείμενο αυτοματισμού απλό), το αντικείμενο ScriptControl αποτυγχάνει να προετοιμαστεί σωστά τον εαυτό, εάν η καθορισμένη γλώσσα VBScript.

Προτεινόμενη αντιμετώπιση

Υπάρχουν δύο λύσεις:
  • Πριν από τη ρύθμιση, καταργήστε την επιλογή της γλώσσας:

    Για να προσθέσετε μια κλήση στο ScriptControl::SetLanguage(NULL) αμέσως πριν την κλήση ScriptControl::SetLanguage("VBScript").
  • Αυτοματοποίηση του αντικειμένου ScriptControl:

    Εναλλακτικά, οι εφαρμογές που χρησιμοποιούν το ScriptControl να μεταβείτε για την αυτοματοποίηση της δέσμης ενεργειών ελέγχου απλώς ως αντικείμενο αυτοματισμού αντί για ένα στοιχείο ελέγχου full-blown. Αυτό έχει το πλεονέκτημα της επίλυσης του σφάλματος που υποδεικνύεται από αυτό το άρθρο, καθώς και βελτίωση των επιδόσεων. Η εφαρμογή-πελάτης δεν χρειάζεται να περάσει από την επιβάρυνση του ActiveX στο στοιχείο ελέγχου που φιλοξενεί διαπραγμάτευσης, το οποίο είναι ουσιαστικά απαραίτητη για τα μη - περιβάλλον εργασίας Χρήστη δέσμης ενεργειών ελέγχου.
Παρακάτω είναι ένα κομμάτι του δείγματος κώδικα που χρησιμοποιεί Visual C++ 5.0 COM υποστηρίζει CoCreateInstance εύκολα το ScriptControl και το ενεργοποιήσετε.

Δείγμα κώδικα

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

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα σφάλμα το οποίο παρουσιάζεται στα προϊόντα της, που αναφέρονται στην αρχή αυτού του άρθρου.Αυτό το σφάλμα διορθώθηκε στο Microsoft Internet Explorer 5.

Περισσότερες πληροφορίες

Βήματα για την αναπαραγωγή της συμπεριφοράς

  1. Δημιουργία νέας εφαρμογής MFC SDI με τις προεπιλεγμένες ρυθμίσεις AppWizard, συμπεριλαμβανομένης της υποστήριξης για στοιχεία ελέγχου ActiveX.
  2. Εισαγάγετε το ScriptControl, επιλέγοντας "ScriptControl αντικείμενο" από το φάκελο "Καταχωρημένες ελέγχου ActiveX" στην περιοχή Project\Add το στοιχείο μενού Project\Components και στοιχεία ελέγχου. Αποδέχεται όλες τις προεπιλογές από τα παράθυρα διαλόγου που ακολουθούν.
  3. Στη μέθοδο OnInitialUpdate της προβολής, εισαγάγετε τον ακόλουθο κώδικα:
    // 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. Προσθέστε ένα # include για το νέο στοιχείο ελέγχου κλάσης αρχείο δέσμης ενεργειών, Scriptcontrol.h, στην προβολή και # ορισμός ID_SCRIPT_CONTROL σε Resource.h σας. Δημιουργία και εκτέλεση της εφαρμογής.

Αναφορές

Για πρόσθετες πληροφορίες, ανατρέξτε στο ακόλουθο άρθρο(α) της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
184904ΑΡΧΕΙΟ: Αρχείο κεφαλίδας ελέγχου MSSCPCTL.EXE Script MSSCPCTL.H
Για περισσότερες πληροφορίες, ανατρέξτε στην ακόλουθη διεύθυνση URL του World Wide Web:
http://msdn2.Microsoft.com/en-us/library/ms950396.aspx

Ιδιότητες

Αναγν. άρθρου: 184977 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
Λέξεις-κλειδιά: 
kbbug kbfix kbie500fix kbmt KB184977 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:184977
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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