[VB6] Composants COM et compatibilité

Composants COM et compatibilité [VB6] - Programmation

Marsh Posté le 15-03-2001 à 09:53:01    

Teste à faire :
 
développer une appli qui utilise le Composant COM Word 2000 ( word 9 ) et la faire tourner sur un PC ou il y a Word 97 ( word 8 )
Résultat ? Compatibilité ?
 
Si résultat négatif,  
Peut-on mettre les deux ocx ( composants COM ) sur un même PC ?
Qui pourrait tester cela en // avec moi ?
 
Qui est intéresé ?
 
 
Allo ????
 
 
C'est un problème que toutes les entreprise utilisant un Composant COM d'Office XX vont découvrir à la première màj de leurs applications développées !!!
 
 
@+

Reply

Marsh Posté le 15-03-2001 à 09:53:01   

Reply

Marsh Posté le 15-03-2001 à 12:31:38    

Tous le composants COM ont un numéro unique,  
donc les composants COM Word 9 et COM Word 8 sont donc différenciés. Il peuvent être présent tous les deux sur la même machine.
Et bien sur un programme devellopé pour le composant COM Word 9 ne pourra pas marcher sur une machine Word97.

Reply

Marsh Posté le 15-03-2001 à 12:35:16    

Est-ce qu'il faudra recompiler l'application après avoir changer la référence vers l'OCX considérée ?
Y a t-il une possibilité de détection automatique de l'applicaation ?

Reply

Marsh Posté le 15-03-2001 à 13:10:11    

Enfin c'est un peut plus compliqué, les types d'objects COM qui sont différenciés.  
L'OCX qui les supporte importe peut.
En général quand on passe d'une version à l'autre d'un l'OCX,
on conserve les anciens type COM et on rajoute des nouveaux.
Un bon example est DirectX qui conserve les ancien types COM  
et rajoute des nouveaux pour les nouvelle fonctions des carte graphiques.
Donc il faut que tu regardes si les type com que tu utilises  
existaitent déja dans les versions précédentes  
( c'est normalement écrit dans la doc)
Si c'est le cas tu n'as besoin de rien faire. Ca marchera quelque soit la version de word installée.  
Comme les jeux qui utilisent DirectX6 alors que DirectX7 est installé sur ta machine
Sinon il faut réécrire ton code pour ne pas les utiliser.

Reply

Marsh Posté le 15-03-2001 à 13:17:30    

Si je comprends bien, les composants COM de Word sont dans un OCX.
 
L'ocx de Word 2000 aurait le même nom que celui de word 97, donc l'appli utiliserait la même référence d'ocx => pas de modif!
 
Les composants COM de Word97 sont inclus dans l'OCX de Word 2000
Tout est alors automatique ?

Reply

Marsh Posté le 15-03-2001 à 13:26:40    

Non tu n'as pas tout compris  :(  
Le nom de l'ocx n'a occune importance, c'est pas une dll.
Ce qui compte c'est ce qu'il y a l'interieur.
Pour ça il faut que tu regarde la doc et les type COM que tu utilise.

Reply

Marsh Posté le 15-03-2001 à 13:31:58    

effectivement, dans VB il n'y a pas de composants (ocx) pour word 9
Je ne trouve qu'une référence à MSWORD9.OLB
Est-ce cela qui est le Type du composant COM ?

Reply

Marsh Posté le 15-03-2001 à 13:40:37    

Tous le OCX ne sont pas des ".ocx"  
Il peut très bien s'appeler "toto.nnn".
Le nom du fichier ne donne aucune indication sur le type de l'objet COM.  
D'ailleur en général un OCX contient plusieurs objets COM.
C'est quand tu importe un OCX dans VB que tu dois voir les types de objets COM qui sont contenus dedans.  
Je ne peux pas te dire où, j'utilise plus VB depuis un certain temps.

Reply

Marsh Posté le 15-03-2001 à 13:52:05    

ca reste flou pour moi :
lors de la compilation, qu'est-ce qui est enregistré ?
la référence ? l'objet ?, le type ? le composant ?
 
Qu'est ce qui peut alors changer quand on passe de Word 97 à word 2000 ?
ça doit forcément être un élément non compilé dans l'application et qui ne change pas de nom, non ?
sinon, ça veut dire que l'appli fait référence au contenu d'un fichier qui lui, est mis à jour en passant de word97 à word 2000? Alors là, effectivement le nom du fichier ( de l'ocx ou de la dll ... ) importe peu. Ce serait le nom du composant COM qui différerait ...
 
je nage toujours un peu plus, et en plus je dois t'embêter ..
désolé

Reply

Marsh Posté le 15-03-2001 à 14:03:58    

En fait chaque type COM à un numéro unique (CLSID) qui est affecté lors de la creation de ce type.
Quand l'ocx est installé sur une machine il référence tous les type qu'il contien dans la base de registre.
Donc dans la base de registre  : CLSID -> nom du fichier qui contient ce type.
Quand un programme veut un utiliser objet du type {784CFA20-2291-11D4-B6EA-00104BFF3BB8} par ex,  il regarde dans la BDR quel fichier peut lui fournir cet objet.
Il charge cet OCX et lui demande un objet du type {784CFA20-2291-11D4-B6EA-00104BFF3BB8}. Le fichier crée l'objet et renvois un pointeur (référence) sur cet objet.
En VB tout ceci est caché au programmeur.

Reply

Marsh Posté le 15-03-2001 à 14:03:58   

Reply

Marsh Posté le 15-03-2001 à 14:04:00    

En fait chaque type COM à un numéro unique (CLSID) qui est affecté lors de la creation de ce type.
Quand l'ocx est installé sur une machine il référence tous les type qu'il contien dans la base de registre.
Donc dans la base de registre  : CLSID -> nom du fichier qui contient ce type.
Quand un programme veut un utiliser objet du type {784CFA20-2291-11D4-B6EA-00104BFF3BB8} par ex,  il regarde dans la BDR quel fichier peut lui fournir cet objet.
Il charge cet OCX et lui demande un objet du type {784CFA20-2291-11D4-B6EA-00104BFF3BB8}. Le fichier crée l'objet et renvois un pointeur (référence) sur cet objet.
En VB tout ceci est caché au programmeur.

Reply

Marsh Posté le 15-03-2001 à 14:12:57    

Génial, j'ai compris
donc c'est le même type d'objet qui doit se retrouver dans le fichier de word2000 et dans celui de word 97
La BDR sert de lien entre le type d'objet et le fichier
 
MAIS alors :
Dans mon cas réel, je développe en VB6 avec office 2000 ( Word 9 ) une application pour les utilisateurs qui auront office 97 ( word 8 )
Si mon type d'objet exite sous les deux versions d'office, je 'pose mon application' chez l'utilisateur et ça marche, OK ?
Si le type est différent, il ne sera pas trouvé dans la BDR, c'est bien cela ?
me sufirait-il d'installer le fichier d'office 2000 dans lequel il y a ce type d'objet COM que mon appli utilise ?
il y aurait alors le fichier de word 97 et le ficheir de word2000 sur le PC des utilisateurs!  
aucunue incompatibilité logique, sauf peut-être pour les type d'objets communs aux deux fichiers !!!
Qu'en penses-tu ?

Reply

Marsh Posté le 15-03-2001 à 14:24:30    

Oui, :bounce:  je pense que tu as compris, mais quelques remarques :
 
Si deux OCX enregistrent le même type d'objet c'est l'ocx le enregistré le dernier qui à raison   :)  
 
Pour installer un ocx autoinstallable il faut faire :  
 regsrv32 nom_de_fichier_ocx
si ça marche pas il y a que le créateur d'ocx qui peut le faire
 
Un autre problème c'est qu'en général les fichier ocx font appel à d'autres fichier ocx ou à des dll.  
Je pense que l'installation complète de Word est nécessaire.
A vérifier bien sur

Reply

Marsh Posté le 15-03-2001 à 14:31:22    

ok, merci
je pense que pour Word2000 il n'y a qu'un seul fichier, MSWORD9.olb dans lequel il y a tous les types d'objets
je te tiendrais au courant
 
sinon, tu as des "bagages" techniques qui me font défaut, ce que tu auras deviné. Y a-t il un ouvrage ou un site où je pourrais apprendre ce genre d'informations très techniques, ou penses-tu que j'ai tout appris avec toi ? :hap:  
Tu es ingénieur ? ou tu as énormément d'expérience ?

Reply

Marsh Posté le 15-03-2001 à 14:40:57    

Je connais pas tout, donc toi non plus ;) , sinon je pense que tu as maintenant le minimun pour utiliser les OCX en VB.
Maintenant si tu veut en créer c'est autre chose...
Je suis pas Ingenieur ( j'ai déja eu eu du mal avec mon BTS ...)  
J'ai 10 ans de prog C++, dont 3 en entreprise et 1 an sur les ActiveX.
J'ai pris la doc de microsoft ( Microsoft develloper network) et sur www.msdn.microsoft.com
et surtout utilisé les examples.  
En fait j'ai commencer à modifier les examples pour comprendre et j'ai approfondis avec la doc.

Reply

Marsh Posté le 15-03-2001 à 14:41:01    

Je connais pas tout, donc toi non plus ;) , sinon je pense que tu as maintenant le minimun pour utiliser les OCX en VB.
Maintenant si tu veut en créer c'est autre chose...
Je suis pas Ingenieur ( j'ai déja eu eu du mal avec mon BTS ...)  
J'ai 10 ans de prog C++, dont 3 en entreprise et 1 an sur les ActiveX.
J'ai pris la doc de microsoft ( Microsoft develloper network) et sur www.msdn.microsoft.com
et surtout utilisé les examples.  
En fait j'ai commencer à modifier les examples pour comprendre et j'ai approfondis avec la doc.

Reply

Marsh Posté le 15-03-2001 à 14:44:29    

ahh la culture ...
 
 
oui, ok et merci encore
j'espère te revoir de temps à autre sur le forum
je vais aussi potasser le site de MS
 
@+ :hello:

Reply

Marsh Posté le 16-03-2001 à 09:18:16    

Si tu es toujours là :
hypothèses:
-je programme sous VB6 et Office 2000
-je vais utiliser le COM de Word9 (2000) pour les impressions
(il faut impérativement que les type d'objets soit "compatibles" ou inclus dans le fichier de Word97)
- je créé mon document type sous Word en l'enregistrant sous le format Word97 !!
 
question :
vais-je automatiquement n'utiliser que les types d'objets de word97 ? et être ainsi compatible d'office avec Word97 et Word 2000?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed