Qu'est-ce que la compatibilité binaire ?Toutes les classes des composants COM (DLL ActiveX, EXE ActiveX, Contrôles ActiveX (OCX)...) sont identifiables par :
En late-binding (CreateObject() sous VB), généralement on se sert du ProgID pour créer une instance de la classe. Celui-ci étant basé sur le nom du composant et celui de la classe, il ne varie pas d'une version à une autre, donc aucun problème de compatibilité n'apparaît (notamment avec les applications déjà existantes utilisant des anciennes versions de notre composant). Donc tout va bien dans le meilleur des mondes :-) ! Par contre en early-binding c'est le CLSID qui est utilisé, or hélas celui-ci varie à chaque compilation en VB (alors qu'en VC++ par exemple il est fixé très simplement une bonne fois pour toute lors la création de la classe). Ainsi les versions ne sont pas compatibles entre elles ! C'est à dire qu'une application utilisant une ancienne version de notre composant ne saura pas reconnaître, et donc utiliser, nos nouvelles versions. Il faudrait donc recompiler à chaque mise à jour toutes les applications utilisant notre composant ! Cela pose donc un énorme problème surtout que de telles incompatibilités empêchent, dans la plupart des cas, le démarrage complet de l'application client, et que c'est l'early-binding qui est le plus couramment utilisé (pour les OCX surtout ou pour les DLL si l'on veut bénéficier de l'Intellisense notamment). Pour rappel, l'utilisation de l'early-binding sous VB se fait par les Composants (Ctrl + T) et par les Références. C'est donc là qu'intervient la compatibilité binaire : elle permet de régler ce problème en fixant le CLSID des classes du composant. Pour l'activer il faut aller dans le menu "Projet / Propriétés" puis cocher "Compatibilité binaire" dans le cadre "Compatibilité des versions" (sous l'onglet "Composants"). Un champ vous permet alors de spécifier un fichier avec lequel rester compatible, traditionnellement, et pour plus de facilité, on indique notre composant lui-même (il faut donc déjà compiler une fois le projet, VB associe alors un CLSID par classe, puis on configure seulement après la compatibilité binaire qui fixera ces CLSID). Ainsi les différentes versions seront compatibles entre elles (dans un sens seulement : une application utilisant une ancienne version pourra sans problème utiliser une version plus récente alors que l'inverse ne sera pas forcément toujours vrai). Bien entendu pour que cela fonctionne comme il faut, il est nécessaire de respecter un minimum de règles (qui sont d'ailleurs tout à fait logiques) :
On peut par contre sans problème ajouter des méthodes, des classes, modifier
le code du corps des fonctions/propriétés déjà existantes... Voir aussi : |
Date de publication : 05 décembre 2004 Dernière modification : 05 décembre 2004 Rubriques : Généralités Mots-clés : compatibilité binaire, early binding, late binding, CLSID, ProgID |