-
[MFC] DCOM
Bonjour,
J'utilise une application C++ pour communiquer avec un oscilloscope numérique qui tourne sous windows 2000, j'utilise DCOM.
Il y a deux façon de faire la liaison avec les fonctions DCOM disponible dans le software de mon oscilloscope:
- Avec IDispatch, apparament sous forme de script (facile à faire)
- Avec CoCreateInstance(...) et les numéros de CLSID (moins facile, surtout pour trouver les numèros d'entrées)
Je suis limité par le temps d'execution dans mon programme et j'ai lu que l'utilisation de la prmière solution (script) et moins performantes.
Je voulais donc savoir si je pouvais espèrer un gain de temps en utilisant la deuxièmes solution et sinon, quel sont les avantages et inconvenients des deux techniques d'accés.
Merci,
-
Je crains que tu parles 2 fois de la même chose. Sauf que en C++ comme c'est typé statiquement y'a beaucoup plus de ligne de codes. Mais le fonctionnement est le même.
http://msdn.microsoft.com/library/en-us/automat/htm/chap3_76p4.asp
Pour y voir un peu plus clair:
http://www.developpez.com/windows/dcom/t1.html
Si ton script ne fait qu'effectuer des appels (D)COM, je suis pas sûr que passer en C++ fasse gagner grand chose.
-
Merci,
J'aurais une autre question:
Peut-on travailer avec les DCOM de façon asynchrone, par exemple on envoie une réquete a un objet A et une fonction de type CallBack est applée dés que la réponse est envoyer par cette objet A.
-
Je sais qu'on peut faire des appels asynchrones en COM mais j'ai jamais essayé. Il en parle dans la FAQ. Y'a un attribut spécial async à utiliser dans le MIDL. Le serveur doit être conçu pour je pense.
Tu peux toujours faire l'appel bloquant dans un autre thread qui t'envera un event pour signaler que l'appel est fini.
-
Ok, je ne connais pas les appels bloquant, as-tu un lien, SVP.
Sinon, j'ai pris la FAQ, elle est tres riche et j'ai vue qu'ils parlaient de ce type d'application asychrone. Merci pour les infos.
-
Pour moi appel bloquant = appel synchrone.
-
Dans la FAQ il est également dit que avec l'utilisation des fonctions qui utilisent "IDispatch" il y a une intérprétation et que les fonctions ces types d'appels sont moins performant.
Mais dans quel sans et jugé la performance?
-
En faisant ainsi tu interroges l'objet sur ce qu'il sait faire et puis tu l'utilises. Forcément c'est plus lent que de savoir tout de suite de quel type il est et de l'utiliser sans rien lui demander. La différence est en fait:
- bonjour objet A donne moi ton nom
- bonjour objet, je me doute que tu es un objet A est-ce bien le cas ? Oui, normalement tu sais me donner ton nom, alors pourais-tu répondre à ma question suivante "quel est ton nom" ?
(bon c'est nul mais tu vois l'idée). Comment faire pour utiliser directement ton objet ? Ben il faut disposer d'un descriptif tout fait de lui, pour ne pas avoir à en créer un à l'exécution. De descriptif tout fait c'est le type library.
http://www.developpez.com/windows/dcom/t1.html#AEN1241
http://www.developpez.com/windows/dcom/t1.html#AEN2123
http://www.developpez.com/windows/dcom/t1.html#AEN2396
En C++ il va servir à un IDE genre VC++ à te générer tout un squelette de classes que tu pourras utiliser bcp bcp plus simplement qu'avec des Invoke dans tous les sens. En fait l'IDE va faire la même chose que VB : il va se servir du tbl pour tout savoir sur le composant COM sans même l'utiliser (et donc sans l'interroger directement), et donc générer une classe qui s'occupe de tout pour l'utiliser.
Y'a aussi la possibilité d'utiliser #import (VC++ only).
Une page riche d'informations:
http://c.developpez.com/faq/vc/?page=Automation
Mais en VB ça reste quand même plus simple.
Il parle de différence de performance, c'est simplement la performance de l'appel. Je doute qu'à ton niveau elle soit significative, sauf si ton code ne fait que des appels très légers et très nombreux.