2010-11-23 6 views
1

Configuration actuelle:Remplacement IPC C++ pour l'interface COM locale?

Windows C++ natif fournit une interface COM utilisée (style RPC, appels de fonctions simples) par un certain nombre d'exécutables de plug-in. La communication est uniquement sur la machine locale.

[App.exe (COM server)] <-> [plugin1.exe (COM client/possible callbacks etc.)] 
         <-> [plugin2.exe (COM client)] 

Nous aimerions maintenant remplacer l'interface COM par quelque chose d'autre pour les plugins sélectionnés.

Quelles options avons-nous pour un IPC local de type "RPC" qui serait aussi facile à utiliser que COM?

Les restrictions suivantes:

  • performance doit être au moins aussi bon que les appels COM locaux. (À la lumière de Steve's answer, toute alternative qui ne serait pas significativement moins performante que les appels COM locaux hors processus serait déjà utile!)
  • L'interface devrait être facile à utiliser. Pas de bidouillage explicite avec de la mémoire et des sockets bruts lors de l'utilisation de l'interface dans les clients ou le serveur.
  • C++ natif sur les fenêtres
+2

Pourquoi remplacer ce que vous avez? La réponse à cette question pourrait éclairer une meilleure solution. –

+0

@John: "Pourquoi" intentionnellement laissé en blanc pour concentrer ceux qui répondent sur la question à portée de main. –

Répondre

2

Performance entre les processus ne correspondra jamais à COM local à un serveur en cours, étant donné que les appels COM en cours réduisent à un simple appel de fonction sur le thread appelant. Pour le trafic inter-processus, il y aura TOUJOURS un marshaling et un surcoût de changement de contexte qui rendra cela plus lent. En faisant un pas de plus, il est peu probable que vous construisiez quelque chose d'aussi simple que ce que vous avez avec COM qui effectue quelque chose comme COM. Pour les serveurs locaux hors processus, COM s'exécute sur une pile RPC optimisée appelée LRPC.

+0

Steve - actuellement ce n'est pas * en cours de processus et il ne devrait pas être en cours de traitement, donc évidemment je ne vais pas comparer les appels en cours à des appels hors processus. Mais merci pour le pointeur sur le LRPC ... semble que COM est déjà assez optimisé. –