Λαμβάνετε ένα μήνυμα λάθους "Σύστημα σφάλμα & H80004005" από μια εφαρμογή της Visual Basic 6.0 όταν ένα MFC ActiveX control υποκατηγορίες οποιαδήποτε από τις κλάσεις παράθυρο υλοποιείται από Comctl32.dll

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

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

Συμπτώματα

Ένα στοιχείο ActiveX MFC ελέγχουν ότι οι δευτερεύουσες κλάσεις οποιοδήποτε παράθυρο κλάσεις υλοποιείται από Comctl32.dll προκαλεί το ακόλουθο μήνυμα λάθους για να δημιουργήθηκε από .exe σε Visual Basic 6.0.
Σφάλμα συστήματος" & H80004005 (-2147467259). Απροσδιόριστο σφάλμα"
Η έκδοση εντοπισμού σφαλμάτων ActiveX στοιχείο ελέγχου προκαλεί μια ASSERT στο αρχείο Ctlcore.cpp, στο τέλος της COleControl::CreateControlWindow, ή να κοντά στη γραμμή 662.

Αυτό το ζήτημα παρουσιάζεται μόνο όταν Δόμηση .exe από το Visual Basic 6.0 και να το εκτελέσετε από έξω από το περιβάλλον προγραμματισμού Visual Basic.

Αιτία

Εκτελέσιμα αρχεία Microsoft Visual Basic προετοιμασία του κοινές βιβλιοθήκη στοιχείων ελέγχου (Comctl32.dll) από προεπιλογή, με αποτέλεσμα το CreateEx η κλήση αποτυγχάνει COleControl::CreateControlWindow. Κλήση παρέχει GetLastError() 0x0000057F - δεν είναι δυνατή η εύρεση κλάση παραθύρου, η οποία δηλώνει ότι το στοιχείο ελέγχου κοινό βιβλιοθήκη πρέπει να γίνει ρητή προετοιμασία.

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

Μέσα στο InitInstance του στοιχείου ελέγχου ActiveX, κάνετε μια κλήση προς:
InitCommonControls(void)
ή
InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls)
Αυτό εξασφαλίζει ότι Comctl32.dll είναι φορτωμένο και προετοιμασία, ανεξάρτητα από εκτελούνται σε κοντέινερ του στοιχείου ελέγχου.

Αντί της κλήσης InitCommonControls από τον κώδικα του στοιχείου ελέγχου, μπορείτε επίσης να καλέσετε απευθείας από εφαρμογή προγράμματος-πελάτη της Visual Basic:
  • Κάνετε γενική δήλωση για την αντίστοιχη φόρμα. Για παράδειγμα:
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
  • Προσθέστε μια κλήση:
    InitCommonControls
    					
    στη μέθοδο Form_Load.
Σε ορισμένες περιπτώσεις, αυτό μπορεί να είναι πολύ αργά για να προετοιμάσει το Βιβλιοθήκη συνηθισμένων στοιχείων ελέγχου. Συνεπώς, συνιστάται να προσθέσετε σε αυτήν την κλήση του InitInstance του στοιχείου ελέγχου.

Κατάσταση

Αυτή η συμπεριφορά οφείλεται στη σχεδίαση.

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

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

  1. Χρησιμοποιώντας τη Visual C++, ο Οδηγός ελέγχου MFC ActiveX, δημιουργήστε ένα το προεπιλεγμένο στοιχείο ελέγχου ActiveX.
  2. Στην ενότητα ρυθμίσεις ελέγχου AppWizard (βήμα 2 από το Visual C++ 6.0 AppWizard), στην κλάση παραθύρου για δευτερεύουσα κλάση, επιλέξτε μία από τα ακόλουθα: msctls_hotkey32, msctls_progress32, msctls_statusbar32, msctls_trackbar32, msctls_updown32, SysAnimate32, SysHeader32, SysListView32, SysTabControl32 ή SysTreeView32.
  3. Δημιουργία του στοιχείου ελέγχου.
  4. Ανοίξτε το Microsoft Visual Basic 6.0 και δημιουργήστε ένα νέο πρότυπο Το project exe.
  5. Από το Έργο μενού, κάντε κλικ στο κουμπί Στοιχεία, και επιλέξτε το στοιχείο ελέγχου που μόλις δημιουργήθηκε με τη Microsoft Visual C++.
  6. Επιλέξτε αυτό το στοιχείο ελέγχου και που σχεδίαση της φόρμας το παράθυρο.
  7. Από το Το αρχείο μενού, κάντε κλικ στο κουμπί Δημιουργία Project.exe, και να κατασκευάσει το exe.
  8. Μεταβείτε στην Εξερεύνηση των Windows και εκτελέστε αυτό το εκτελέσιμο αρχείο.

Ιδιότητες

Αναγν. άρθρου: 223152 - Τελευταία αναθεώρηση: Παρασκευή, 27 Μαΐου 2011 - Αναθεώρηση: 6.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Foundation Class Library 4.2 στις ακόλουθες πλατφόρμες
    • Microsoft Visual Basic 5.0 Learning Edition
    • Microsoft Visual Basic 5.0 Professional Edition
    • Microsoft Visual Basic 6.0 Professional Edition
    • Microsoft Visual Basic 5.0 Enterprise Edition
Λέξεις-κλειδιά: 
kberrmsg kbtshoot kbcmnctrls kbctrl kbprb kbmt KB223152 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:223152

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

 

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