par rapport a directX, c quoi "COM" ? - C++ - Programmation
Marsh Posté le 24-03-2003 à 09:05:02
lorill a écrit : ca n'a rien a voir |
g un bouquin sur directX 7 qui en parle, donc je ne pense pas que ça n'ai rien a voir
et de toute façon : c quoi COM ?
Marsh Posté le 24-03-2003 à 09:08:18
ben si, ca n'a rien a voir
y'en a un c'est une api graphique, et l'autre c'est un systeme de composants, en (tres) gros
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 : |
Au niveau runtime, il faut comprendre: Windows (32 bits)
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
Marsh Posté le 24-03-2003 à 12:37:24
bien intéressant tout ça. j'en ai appris un max moi
par contre:
legreg a écrit : |
LeGreg> tu codes des jeux vidéo ?
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?
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 ?
Marsh Posté le 24-03-2003 à 19:10:42
airseb a écrit : |
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.
Marsh Posté le 24-03-2003 à 19:37:47
TBone a écrit : |
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
Marsh Posté le 24-03-2003 à 20:07:17
Marsh Posté le 24-03-2003 à 20:24:21
legreg a écrit : |
en effet je n'avais pas lu l'entièreté de ton post, désolé pour cette question répétitive.
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)?
Marsh Posté le 24-03-2003 à 08:58:32
tout est dans la question.