2016-01-20 1 views
0

Je sais que je peux enregistrer mon objet COM à consommer inproc (via l'enregistrement com standard) et outproc (via dcom) hébergé dans un processus dédié dllhost.exe.Héberger un serveur COM à l'intérieur de mon processus

Mais est-il possible d'avoir mon objet COM exécuté dans un external process pour le consommateur (comme dcom) seulement pas hébergé dans dllhost plutôt mon propre processus?

Mon but est d'avoir un processus (service windows) exécutant ma logique, et d'héberger juste un objet COM afin que d'autres processus puissent communiquer avec moi en utilisant CoCreateInstance simple de l'objet COM. C'est possible?

S'il vous plaît ne pas offrir d'autres protocoles comme une réponse, s'il n'est pas possible d'héberger COM de cette façon est une réponse suffisante.

Merci!

+4

COM a la notion de DLL Surrogates: https://msdn.microsoft.com/en-us/library/windows/desktop/ms695225.aspx. dllhost.exe est le processus de substitution par défaut, vous pouvez en écrire un personnalisé: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682432.aspx. Cependant lorsque vous dites "héberger un objet COM pour que d'autres processus puissent communiquer avec moi en utilisant CoCreateInstance simple de l'objet COM", vous n'avez pas besoin de toute cette plomberie (complexe). Hébergez et enregistrez simplement l'objet COM à partir de votre service Windows. C'est ce qu'on appelle un serveur COM out-of-process. –

+0

Lorsque vous créez un nouveau projet Visual Studio à l'aide du modèle 'ATL project', l'assistant vous demande de choisir si vous souhaitez l'héberger dans dll, exe ou service exe. C'est probablement le moyen le plus facile de commencer. Voir le deuxième paragraphe ici: https://msdn.microsoft.com/en-us/library/windows/desktop/ms683835(v=vs.85).aspx –

+0

@SimonMourier - si vous allez déplacer votre commentaire à une réponse Je vais taguer est la réponse. Merci quand même!! – sternr

Répondre

0

COM a la notion de DLL Surrogates:

COM permet de créer des serveurs de DLL qui peuvent être chargés dans un processus de substitution EXE . Cela combine la facilité d'écriture des serveurs DLL avec les avantages de l'implémentation exécutable. Outils de développement tels que Microsoft Visual Studio faciliter l'écriture des serveurs de DLL, mais un serveur DLL en elle-même a des limites

dllhost.exe que l'on voit souvent en cours d'exécution (comme une ou plusieurs instances) en arrière-plan est en fait la valeur par défaut processus de substitution, mais vous pouvez en écrire un personnalisé: Writing a Custom Surrogate. C'est quelque chose qui est rarement vu. Cependant quand vous dites "héberger un objet COM pour que d'autres processus puissent communiquer avec moi en utilisant CoCreateInstance simple de l'objet COM", je ne pense pas que vous ayez besoin de tout ce plomberie (qui peut être assez complexe à implémenter). Hébergez et enregistrez simplement l'objet COM à partir de votre service Windows. C'est ce qu'on appelle un Out-Of-Process COM server par opposition au serveur COM In-Process (une DLL).