OVH Cloud OVH Cloud

CLSID d'un OCX

6 réponses
Avatar
Ludovic SOEUR
Bonjour,

J'ai un petit souci qui commence vraiment à m'embêter. J'ai mon application
qui est un composant ActiveX. Le fichier OCX créé contient son CLSID propre.
Il s'avère qu'à chaque compilation, ce numéro change. En fait, je voudrais
qu'il change que quand je le désire...et même, je voudrais pour FIXER sa
valeur à celle que je désire. Est-ce possible ?
Si ce n'est pas possible, existe-t'il un moyen de récupérer le CLSID d'un
OCX par une API windows ou autre ?

Merci par avance

6 réponses

Avatar
Zoury
Yep! ça s'appelle de la compatibilité binaire.. tu peux l'initialiser par le
menu Project/Project Properties... dans l'onglet Component. (faire
traduction..) :O)


Pour bonne compréhension de ce qu'implique la compatiblité binaire avec ta
composante, je te conseilles le document suivant :

Binary Compatibility
http://www.vbsight.com/BinaryComp.htm


ou encore cette section de la MSDN :

Version Compatibility in ActiveX Components
http://msdn.microsoft.com/library/en-us/vbcon98/html/vbcontypelibraryversions.asp

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"Ludovic SOEUR" wrote in message
news:%
Bonjour,

J'ai un petit souci qui commence vraiment à m'embêter. J'ai mon


application
qui est un composant ActiveX. Le fichier OCX créé contient son CLSID


propre.
Il s'avère qu'à chaque compilation, ce numéro change. En fait, je voudrais
qu'il change que quand je le désire...et même, je voudrais pour FIXER sa
valeur à celle que je désire. Est-ce possible ?
Si ce n'est pas possible, existe-t'il un moyen de récupérer le CLSID d'un
OCX par une API windows ou autre ?

Merci par avance




Avatar
François Picalausa
Hello!

Dans les options du projet, il faut définir la compatibilité binaire et dans
ce cas le guid ne changera plus.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Ludovic SOEUR" a écrit dans le message de
news:%
Bonjour,

J'ai un petit souci qui commence vraiment à m'embêter. J'ai mon
application qui est un composant ActiveX. Le fichier OCX créé
contient son CLSID propre. Il s'avère qu'à chaque compilation, ce
numéro change. En fait, je voudrais qu'il change que quand je le
désire...et même, je voudrais pour FIXER sa valeur à celle que je
désire. Est-ce possible ?
Si ce n'est pas possible, existe-t'il un moyen de récupérer le CLSID
d'un OCX par une API windows ou autre ?

Merci par avance


Avatar
Ludovic SOEUR
Merci Zoury et François.

C'est exactement cela. Ca me permet déjà de résoudre quasiment tous les
problèmes que j'avais à ce sujet.
C'est vrai que c'est beau la compatibilité binaire !

Il ne reste que 2 détails :
- Est-il possible de fixer le CLSID a une valeur désirée au lieu que ce soit
VB qui m'en crée un par défaut ?
- Est-ce possible de récupérer le CLSID d'un OCX quelconque (que je n'ai pas
développé) ? Comment ?

Merci par avance.
Avatar
François Picalausa
Hello,

- Est-il possible de fixer le CLSID a une valeur désirée au lieu que
ce soit VB qui m'en crée un par défaut ?



En C/C++ il semble que oui

- Est-ce possible de récupérer le CLSID d'un OCX quelconque (que je
n'ai pas développé) ? Comment ?



Si tu connais le progid, tu peux le faire via l'éditeur de registre avec par
exemple:
HK_CLASSES_ROOTnom_société.composantCLSID(default)
ou plus généralement
HK_CLASSES_ROOTprogidCLSID(default)

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Ludovic SOEUR" a écrit dans le message de
news:%
- Est-il possible de fixer le CLSID a une valeur désirée au lieu que
ce soit VB qui m'en crée un par défaut ?
- Est-ce possible de récupérer le CLSID d'un OCX quelconque (que je
n'ai pas développé) ? Comment ?


Avatar
Zoury
> - Est-il possible de fixer le CLSID a une valeur désirée au lieu que ce


soit
VB qui m'en crée un par défaut ?



Il me semble que oui... mais pas avec VB. Il s'occupe de tout ces détails.
Mais de toute façon à quoi cela servirait? Le CLSID n'est en fait qu'un GUID
(Globally Unique IDentifier). Tenter d'en créer un à la main ne pourrait que
créer des conflits.. :OP

- Est-ce possible de récupérer le CLSID d'un OCX quelconque (que je n'ai


pas
développé) ? Comment ?



Yep. Les informations sur les composantes COM sont conservées dans le
registre sous la clé HKEY_CLASSES_ROOT. Ils sont classé par ProgID soit :
[Librairie].[Classe] et dans cette clé tu peux y trouver le CLSID. La clé
HKEY_CLASSES_ROOT offre aussi une sous clé nommé CLSID qui contient toutes
les composantes classé par CLSID, cette clé contient beaucoup plus
d'information comme par exemple le chemin d'accès à cette composante. Donc
fait une recherche sur la librairie et la classe que tu cherches et tu
devrais trouvé ton CLSID.

Ex :
HKEY_CLASSES_ROOT
|
---- Project1.Class1
|
---- CLSID : (default) = {B71022C2-76EA-445B-99D7-2FD799E5EE63}
|
----CLSID
|
---- {B71022C2-76EA-445B-99D7-2FD799E5EE63}
|
---- ProgID (default) = Project1.Class1
|
---- toutes les autres infos utiles


Ce sont ces infos qui sont créer lorsque l'on enregistre une dll avec
regsvr32

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Ludovic SOEUR
Vraiment merci à vous 2. Vous avez résolu tous mes problèmes

Pour répondre à Zouri quand à l'utilité de fixer le CLSID, c'est que j'ai
déjà un composant que j'ai compilé. Bien sur, VB m'a fixé un CLSID. Comme je
ne connaissais pas encore la compatibilité binaire, j'ai modifié
dernièrement et recompilé mon code mais le clsid a été modifié. Donc je suis
coincé parce que je ne peux pas revenir au clsid précédent. Mais bon,
apparemment, ce n'est pas possible. Donc à partir de maintenant, ce sera
tout bon. Pour le reste, et bien je ne sais pas encore comment je vais
faire.

En tout cas, encore merci à vous deux.


"Zoury" a écrit dans le message de news:

> - Est-il possible de fixer le CLSID a une valeur désirée au lieu que ce
soit
> VB qui m'en crée un par défaut ?

Il me semble que oui... mais pas avec VB. Il s'occupe de tout ces détails.
Mais de toute façon à quoi cela servirait? Le CLSID n'est en fait qu'un


GUID
(Globally Unique IDentifier). Tenter d'en créer un à la main ne pourrait


que
créer des conflits.. :OP

> - Est-ce possible de récupérer le CLSID d'un OCX quelconque (que je n'ai
pas
> développé) ? Comment ?

Yep. Les informations sur les composantes COM sont conservées dans le
registre sous la clé HKEY_CLASSES_ROOT. Ils sont classé par ProgID soit :
[Librairie].[Classe] et dans cette clé tu peux y trouver le CLSID. La clé
HKEY_CLASSES_ROOT offre aussi une sous clé nommé CLSID qui contient toutes
les composantes classé par CLSID, cette clé contient beaucoup plus
d'information comme par exemple le chemin d'accès à cette composante. Donc
fait une recherche sur la librairie et la classe que tu cherches et tu
devrais trouvé ton CLSID.

Ex :
HKEY_CLASSES_ROOT
|
---- Project1.Class1
|
---- CLSID : (default) {B71022C2-76EA-445B-99D7-2FD799E5EE63}
|
----CLSID
|
---- {B71022C2-76EA-445B-99D7-2FD799E5EE63}
|
---- ProgID (default) = Project1.Class1
|
---- toutes les autres infos utiles


Ce sont ces infos qui sont créer lorsque l'on enregistre une dll avec
regsvr32

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/