Erhalten Sie eine Fehlermeldung "System Error &H80004005" von einer Visual Basic 6.0-Anwendung bei einer MFC-ActiveX-Steuerelement Unterklassen eines der Fensterklassen implementiert von Comctl32.dll

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 223152 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Eine MFC-ActiveX-Steuerelement, Unterklassen eines die Fensterklassen von Comctl32.dll Ursachen den folgenden Fehler aus einer Visual Basic 6.0-exe ausgelöst werden implementiert.
"System Fehler & H80004005 (-2147467259). Unbekannter Fehler"
Die Debugversion der das Steuerelement führt ASSERT Datei Ctlcore.cpp am Ende des COleControl::CreateControlWindow, auf oder Zeile 662.

Dieses Problem tritt auf, nur, wenn Sie eine EXE-Datei von Visual Basic 6.0 erstellen und Ausführen von außerhalb der Visual Basic-Entwicklungsumgebung.

Ursache

Microsoft Visual Basic ausführbare Dateien nicht allgemeine Steuerelement Bibliothek (Comctl32.dll) standardmäßig führt der CreateEx initialisieren Aufruf in COleControl::CreateControlWindow fehlschlägt. GetLastError() aufrufen bietet 0x0000057F - Fensterklasse, womit das allgemeine Steuerelement Bibliothek muss explizit initialisiert werden nicht gefunden.

Lösung

Innerhalb der InitInstance des ActiveX-Steuerelements tätigen eines zu:
InitCommonControls(void)
oder
InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls)
diese wird sichergestellt, dass Comctl32.dll geladen und initialisiert, unabhängig von der Container des Steuerelements ausgeführt wird.

Anstelle von InitCommonControls aus Code des Steuerelements aufrufen, können Sie auch direkt von der Visual Basic-Clientanwendung aufrufen:
  • Stellen Sie eine allgemeine Deklaration für das entsprechende Formular; zum Beispiel:
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
  • Fügen Sie einen Aufruf hinzu:
    InitCommonControls
    					
    in der Form_Load-Methode.
In einigen Situationen könnte dies zu spät zum Initialisieren der allgemeinen Steuerelemente Bibliothek sein. Daher wird empfohlen diese Aufruf in InitInstance des Steuerelements hinzufügen.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Mithilfe von Visual C++, MFC-ActiveX-Steuerelement-Assistenten erstellen Sie einen Standard ActiveX-Steuerelement.
  2. Wählen Sie im von AppWizard (Schritt 2 von der Visual C++ 6.0 AppWizard) in der Fensterklasse, um eine Unterklasse Steuerelementeinstellungen-Abschnitt, eine der folgenden: msctls_hotkey32, msctls_progress32, msctls_statusbar32, msctls_trackbar32, msctls_updown32, SysAnimate32, SysHeader32, SysListView32, SysTabControl32 oder SysTreeView32.
  3. Erstellen Sie das Steuerelement.
  4. Öffnen Sie Microsoft Visual Basic 6.0 und erstellen Sie ein neues Standard EXE-Projekt.
  5. Im Menü Projekt klicken Sie auf Komponenten , und wählen Sie das Steuerelement, das Sie nur mit Microsoft Visual C++ erstellt.
  6. Wählen Sie dieses Steuerelement und in der Form zu zeichnen, Fenster.
  7. Im Menü Datei klicken Sie auf Project.exe überprüfen und erstellen Sie exe-Datei.
  8. Wechseln Sie zu Windows Explorer, und führen Sie diese ausführbare Datei.

Eigenschaften

Artikel-ID: 223152 - Geändert am: Dienstag, 21. November 2006 - Version: 3.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Foundation Class Library 4.2, wenn verwendet mit:
    • Microsoft Visual C++ 5.0 Standard Edition
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual Basic 5.0 Learning Edition
    • Microsoft Visual Basic 6.0 Learning Edition
    • Microsoft Visual Basic 5.0 Professional Edition
    • Microsoft Visual Basic 6.0 Professional Edition
    • Microsoft Visual Basic 5.0 Enterprise Edition
    • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Keywords: 
kbmt kberrmsg kbtshoot kbcmnctrls kbctrl kbprb KB223152 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 223152
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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