OVH Cloud OVH Cloud

Détecter la présence d'un composant ActiveX

1 réponse
Avatar
NeoB
Bonjour le groupe,

Je suis confronté à un lèger problème. J'ai cherché sur Google et rien du
tout.

Ma question :

Comment détecter via code si un composant ActiveX (pas une DLL mais bien un
composant) est inscrit sur une machine ?

Contrainte :
- ne surtout pas se fier à la présence ou non du fichier OCX sur la machine.
L'existance du fichier ne prouve en aucun cas qu'il est bien inscrit.
- ne pas réinscrire sauvagement l'OCX à chaque démarrage de l'application
sans savoir préalablement s'il est déjà inscrit. Un conflit de version
serait une catastrophe.

Détecter une erreur CreateObject ne peut être effectué vue que cela ne
fonctionnerait qu'avec des DLL ActiveX. Donc j'abandonne cette piste.

Peut-être via le registry ? Je ne sais pas.

Merci pour votre précieuse aide.

NéoB

1 réponse

Avatar
Guy DETIENNE
Salut ;O)

Cela m'étonne que la méthode CreateObject ne fonctionne qu'avec les DLL
ActiveX.
Un composant ActiveX est un serveur in-process au même titre qu'une DLL
ActiveX.

J'ai fait un test de mon côté avec CreateObject et cela fonctionne bien pour
mes contrôles.
Question : as-tu entré le bon nom de la classe d'objet ?

Exemple qui marche chez moi (composants TaskPanel de l'Xtreme Suite)

Dim oTest as Object
Set oTest = CreateObject("XtremeSuiteControls.TaskPanelCtrl.9.60")

Et aucune erreur.

Vois dans la Registry HKEY_CLASSES_ROOT comment ton composant est référencé.
Par exemple pour le TreeView de Microsoft c'est la clé
HKEY_CLASSES_ROOTMSComctlLib.TreeCtrl

Guy




"NeoB" a écrit dans le message de
news:
Bonjour le groupe,

Je suis confronté à un lèger problème. J'ai cherché sur Google et rien du
tout.

Ma question :

Comment détecter via code si un composant ActiveX (pas une DLL mais bien


un
composant) est inscrit sur une machine ?

Contrainte :
- ne surtout pas se fier à la présence ou non du fichier OCX sur la


machine.
L'existance du fichier ne prouve en aucun cas qu'il est bien inscrit.
- ne pas réinscrire sauvagement l'OCX à chaque démarrage de l'application
sans savoir préalablement s'il est déjà inscrit. Un conflit de version
serait une catastrophe.

Détecter une erreur CreateObject ne peut être effectué vue que cela ne
fonctionnerait qu'avec des DLL ActiveX. Donc j'abandonne cette piste.

Peut-être via le registry ? Je ne sais pas.

Merci pour votre précieuse aide.

NéoB