Vous recevez un message d'erreur «System Error &H80004005» d'une application Visual Basic 6.0 lorsqu'un sous-classes de contrôle MFC ActiveX les classes de fenêtre implémentées par Comctl32.dll

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

Sommaire

Symptômes

Un MFC contrôle ActiveX qui sous-classe les classes de fenêtre implémentée par Comctl32.dll provoque l'erreur suivante levée à partir d'un fichier .exe de Visual Basic 6.0.
"Système erreur & H80004005 (-2147467259). Erreur non spécifiée"
La version de débogage de ce contrôle provoque une assertion dans le fichier Ctlcore.cpp, à la fin de COleControl::CreateControlWindow, sur ou près de la ligne 662.

Ce problème se produit uniquement lorsque vous générez un fichier .exe à partir de Visual Basic 6.0 et que vous exécutez en dehors de l'environnement de développement Visual Basic.

Cause

Fichiers exécutables de Microsoft Visual Basic ne pas initialisent la bibliothèque de contrôle commune (Comctl32.dll) par défaut, ce qui entraîne la CreateEx appel échoue dans COleControl::CreateControlWindow. L'appel de GetLastError() donne 0x0000057F - Impossible de trouver le classe de fenêtre, qui indique la bibliothèque de contrôle commune doit être initialisé explicitement.

Résolution

À l'intérieur de la fonction InitInstance de votre contrôle ActiveX, effectuer un appel à:
InitCommonControls(void)
ou
InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls)
Ceci garantit que Comctl32.dll est chargé et initialisé, indépendamment du conteneur le contrôle s'exécute.

Au lieu d'appeler InitCommonControls à partir de code du contrôle, vous pouvez également l'appeler directement à partir de l'application client Visual Basic :
  • Faire une déclaration générale pour le formulaire correspondant ; par exemple :
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
  • Ajoutez un appel à:
    InitCommonControls
    					
    dans la méthode Form_Load.
Dans certaines situations, ceci peut être trop tard pour initialiser la bibliothèque de contrôles communs. Par conséquent, il est recommandé d'ajouter cet appel dans InitInstance du contrôle.

Statut

Ce comportement est voulu par la conception même du produit.

Plus d'informations

Procédure pour reproduire le problème

  1. À l'aide de Visual C++, Assistant du contrôle MFC ActiveX, créer un contrôle par défaut.
  2. Dans la section Paramètres du contrôle de AppWizard (étape 2 de Visual C++ 6.0 AppWizard), dans la classe de fenêtre à sous-classer, choisissez une des opérations suivantes : msctls_hotkey32, msctls_progress32, SysTabControl32 msctls_statusbar32, msctls_trackbar32, msctls_updown32, SysAnimate32, SysHeader32, SysListView32, ou SysTreeView32.
  3. Générer le contrôle.
  4. Ouvrez Microsoft Visual Basic 6.0 et créez un nouveau projet standard Exe.
  5. Dans le menu projet, cliquez sur composants et sélectionnez le contrôle que vous venez de créer à l'aide de Microsoft Visual C++.
  6. Sélectionnez ce contrôle et qui dessiner dans le formulaire de fenêtre.
  7. Dans le menu fichier, cliquez sur Make Project.exe et générer le fichier exe.
  8. Accédez à l'Explorateur Windows et exécutez cet exécutable.

Propriétés

Numéro d'article: 223152 - Dernière mise à jour: mardi 21 novembre 2006 - Version: 3.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Foundation Class Library 4.2 sur le système suivant
    • Microsoft Visual C++ 5.0 Édition Standard
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual Basic 5.0 Édition initiation
    • Microsoft Visual Basic 6.0 Édition initiation
    • Microsoft Visual Basic 5.0 Édition professionnelle
    • Microsoft Visual Basic 6.0 Édition professionnelle
    • Microsoft Visual Basic 5.0 Édition Entreprise
    • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Mots-clés : 
kbmt kberrmsg kbtshoot kbcmnctrls kbctrl kbprb KB223152 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: 223152
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.

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