Bonjour,
J'ai une application VFP9 contenant notamment des formulaires avec des contrôles TreeView "version 1", s'appuyant sur COMCTL32.OCX. Pour ces contrôles :
- OLETypeAllowed = -2 - ActiveX Control
- OLEClass = COMCTL.TreeCtrl.1
- ParentClass = Olecontrol
Cette application est habituellement installée en ajoutant notamment COMCTL32.OCX (version 6.0.81.5) sur le poste utilisateur (s'il n'est pas déjà présent), puis en l'enregistrant avec "regsvr32".
L'application fonctionne normalement ainsi sur de nombreux ordinateurs avec diverses versions de Windows, sauf sur un Windows Server 2003 avec Office 2007 : une erreur "Code d'erreur OLE 0x80040154: Classe non enregistrée. Objet OLE ignoré. N° d'enregistrement 19." apparait à chaque ouverture d'une fenêtre contenant un contrôle TreeView. Pourtant, "regsvr32 COMCTL32.OCX" s'exécute sans erreur sur cet ordinateur.
Ce genre d'erreur est parfois arrivé sur d'autres postes utilisateurs par le passé, mais à chaque fois résolu en ré-exécutant "regsvr32 COMCTL32.OCX".
Par ailleurs, j'ai tenté de reproduire le phénomène sur un autre ordinateur de test avec Windows Server 2003 et Office 2007 : l'erreur ne se produit pas et les fenêtres avec TreeView s'affichent normalement !
J'ai essayé de comparer les versions de la DLL COMCTL32.DLL présente sur ces ordinateurs, pensant qu'une version très récente mise à jour par l'installation d'Office 2007 pourrait provoquer le phénomène. Difficile de savoir à quoi s'en tenir car il existe souvent plusieurs exemplaires de cette DLL : 1 exemplaire dans \Windows\system32\ + 1 ou plusieurs autres dans des répertoires \WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_.....\, la DLL réellement prise en compte lors de l'instruction "regsvr32 COMCTL32.OCX" n'étant visiblement pas celle de \Windows\system32\ (vu grâce aux outils "process monitor" et "process explorer") !
Toute piste ou retour d'expérience est bienvenu.
- quel OCX / DLL est réellement en cause ?
- COMCTL32.DLL doit-elle être à une version précise pour utiliser un objet COMCTL.TreeCtrl.1 ? Dans quel sous-répertoire de \Windows\ ?
- Est-il nécessaire de modifier les TreeView des formulaires VFP pour passer en "version 2" (OLEClass = MSComctlLib.TreeCtrl.2) s'appuyant sur MSComctl.OCX, lorsqu'on souhaite utiliser l'application dans des environnements "récents" ? Cela représente un travail conséquent pour mon application.
Merci d'avance.