-
[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.