par rapport a directX, c quoi "COM" ?

par rapport a directX, c quoi "COM" ? - C++ - Programmation

Marsh Posté le 24-03-2003 à 08:58:32    

tout est dans la question.

Reply

Marsh Posté le 24-03-2003 à 08:58:32   

Reply

Marsh Posté le 24-03-2003 à 09:00:30    

ca n'a rien a voir  [:sinclaire]

Reply

Marsh Posté le 24-03-2003 à 09:05:02    

lorill a écrit :

ca n'a rien a voir  [:sinclaire]  


 
g un bouquin sur directX 7 qui en parle, donc je ne pense pas que ça n'ai rien a voir  :o
 
et de toute façon : c quoi COM ?


Message édité par airseb le 24-03-2003 à 09:05:56
Reply

Marsh Posté le 24-03-2003 à 09:08:18    

ben si, ca n'a rien a voir  [:sinclaire]  
y'en a un c'est une api graphique, et l'autre c'est un systeme de composants, en (tres) gros

Reply

Marsh Posté le 24-03-2003 à 09:27:49    

si, depuis DirectX7, ça a à voir vu qu'on peut utiliser DirectX en Visual Basic.  Mais si tu programmes en Visual C++, cela ne te concernera effectivement pas.  Voici ce que dit MSDN:
 

Citation :


COM (Component Object Model)
 
Purpose
 
COM is a platform-independent, distributed, object-oriented system for creating binary software components that can interact. COM is the foundation technology for Microsoft's OLE (compound documents) and ActiveX® (Internet-enabled components) technologies, as well as others.  
 
Where Applicable
 
COM objects can be created with a variety of programming languages. Object-oriented languages, such as C++, provide programming mechanisms that simplify the implementation of COM objects. These objects can be within a single process, in other processes, even on remote machines.
 
Developer Audience
 
COM is designed primarily for C++ and Microsoft Visual Basic® developers.  
 
Run-time Requirements
 
Runs on a wide variety of operating systems


Au niveau runtime, il faut comprendre: Windows (32 bits)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 24-03-2003 à 12:30:39    

COM c'est comme ça que sont censées communiquer les applications sur plateforme windows.
 
En gros dès que tu fais quelque chose d'un peu complexe sous windows impliquant plusieurs applications tu utilises COM (meme si c'est caché).
 
C'est un modèle de composants logiciel et c'est sensé être indépendant du langage (c'est utilisable en C pur). Par exemple, les composants COM ne supportent aucune fancy features du C++, comme l'heritage virtuel, la surcharge des operateurs et des methodes, le name mangling, les namespaces etc..
 
Tu as un composant qui est décrit par une interface.  
Cette interface est tirée d'une table par type de composant et des relations d'héritage.  
Comment tu accèdes aux méthodes? par une table virtuelle et l'emplacement (dispatch) de chaque méthode dans cette table virtuelle. Pour pouvoir accèder aux méthodes d'un objet COM de base, il faut soit se lier statiquement à cette table virtuelle, soit utiliser des objets automation qui permettent d'utiliser des composants pour lesquels tu n'as aucune information à la compilation (interface IDispatch).  
Les méthodes ont évidemment des conventions d'appels stricts (cdecl avec this passé sur la pile).
 
C'est un peu complexe et il est difficile de tout connaître.
Ce qu'il faut savoir c'est que DirectX est constitué à 100% par des composants COM et les 10% restant par des librairies "classiques" (lièes statiquement ou de manière dynamique).
 
Tu ne crées pas un objet Dx par un appel à CoCreateInstance mais tu passes par un point d'entrée statique qui crée cet objet pour toi (par exemple Direct3DCreate9). Ce passage vérifie que tu as compilé avec la bonne version du SDK, avant de te passer un pointeur vers une interface valide.  
La raison pour cela n'est pas entièrement sûre mais je crois que les ingénieurs de DirectX ont simplement voulu simplifier la création d'objets tout en empechant la creation d'objets à distance et autres trucs possibles en COM. C'est sensé être une API de haute performance qui ne sera utilisé que de manière très locale par une application et ça évite d'avoir à passer par le runtime de COM et d'avoir à appeler CoInitialize dans chaque thread. De plus avec CoCreateInstance tu sépares la création de l'initialisation ce qui n'est pas vraiment utile pour DirectX.
 
Chaque objet DirectX implemente juste l'interface de base de COM c'est à dire IUnknown en plus de la leur. Seul AddRef et Release sont utilisés par le programmeur. Les composants DirectX ne sont pas des objets automation (qui implementent IDispatch).  
 
En gros COM/DCOM/Automation est beaucoup plus vaste que ce que DirectX laisse entrevoir et le fait que les objets DirectX soient des composants COM relève désormais de l'anecdote (pour AddRef et Release) et peut-être un peu moins pour Visual Basic.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 24-03-2003 à 12:37:24    

bien intéressant tout ça. j'en ai appris un max moi  
:hello:
 
par contre:

legreg a écrit :


C'est un peu complexe et il est difficile de tout connaître.
Ce qu'il faut savoir c'est que DirectX est constitué à 100% par des composants COM et les 10% restant par des librairies "classiques" (lièes statiquement ou de manière dynamique).


;)
 
LeGreg> tu codes des jeux vidéo ?


Message édité par TBone le 24-03-2003 à 12:39:56

---------------
A straight line is a special case of a curve. It's a curve which is uncurved. -- Susskind.
Reply

Marsh Posté le 24-03-2003 à 13:37:52    

airseb> pour être complet, disons que COM est une interface supplémentaire, qui facilitera surtout la vie des programmeurs VB, alors que les autres (C, C++, Delphi, ...) préféreront les API habituelles.  Car au fond je me demande: l'interface COM de DirectX n'est-elle pas juste un wrapper?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 24-03-2003 à 18:41:17    

drasche a écrit :

airseb> pour être complet, disons que COM est une interface supplémentaire, qui facilitera surtout la vie des programmeurs VB, alors que les autres (C, C++, Delphi, ...) préféreront les API habituelles.  Car au fond je me demande: l'interface COM de DirectX n'est-elle pas juste un wrapper?


 
désolé mais c quoi un wrapper ?

Reply

Marsh Posté le 24-03-2003 à 19:10:42    

airseb a écrit :


 
désolé mais c quoi un wrapper ?


une interface qui est traduite en une autre interface.  Par exemple, on peut programmer un wrapper Direct3D qui se placera au dessus de Glide de feu 3Dfx.


Message édité par drasche le 24-03-2003 à 19:11:05

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 24-03-2003 à 19:10:42   

Reply

Marsh Posté le 24-03-2003 à 19:37:47    

TBone a écrit :


legreg a écrit :
C'est un peu complexe et il est difficile de tout connaître.  
Ce qu'il faut savoir c'est que DirectX est constitué à 100% par des composants COM et les 10% restant par des librairies "classiques" (lièes statiquement ou de manière dynamique).  
 
;)


 
Il y a trois sortes de mathématiciens: ceux
qui savent compter et les autres.
 
En fait : la partie non COM étant une surcouche, il y a donc bien 10% de bonus..  
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 24-03-2003 à 20:07:17    

:D


---------------
A straight line is a special case of a curve. It's a curve which is uncurved. -- Susskind.
Reply

Marsh Posté le 24-03-2003 à 20:24:21    

legreg a écrit :


En fait : la partie non COM étant une surcouche, il y a donc bien 10% de bonus..  


:jap: en effet je n'avais pas lu l'entièreté de ton post, désolé pour cette question répétitive.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 08-04-2003 à 12:11:24    

Vous auriez pas un tutorial en français sur DCOM en C++ (j'ai juste une FAQ)?


Message édité par pifarkus le 08-04-2003 à 12:14:09
Reply

Sujets relatifs:

Leave a Replay

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