Que dois-je faire pour implémenter un serveur COM “out of proc” en C #?

J’essaie d’implémenter un serveur COM “out of proc” écrit en C #. Comment puis-je faire cela?

J’ai besoin que le code C # soit “out of proc” dans mon application C ++ principale, car je ne peux pas charger le runtime .NET dans mon espace processus principal.

POURQUOI?:
Mon code C ++ se trouve dans une DLL chargée dans de nombreux fichiers EXE clients différents, dont certains utilisent des versions différentes du runtime .NET. Puisqu’il ne peut y avoir qu’un seul runtime chargé dans un seul processus, mon meilleur choix semble être de placer mon code C # dans un autre processus.

Vous pouvez créer des composants COM + à l’aide de System.EnterpriseServices.ServicedComponent. Par conséquent, vous pourrez créer une activation de composant hors processus et un processus client (client), ainsi que tous les avantages COM + du pooling, de la communication à distance, de l’exécution en tant que service Windows, etc.

Ici nous pouvons lire que c’est possible, mais l’exe sera chargé en tant que bibliothèque et ne sera pas démarré dans son propre processus comme un exe. Je ne sais pas si c’est un problème pour vous? Il contient également quelques solutions possibles si vous souhaitez le faire agir comme un véritable serveur de communication hors processus. Mais il est peut-être préférable d’utiliser un autre moyen de communication inter-processus. Comme .Net Remoting.

Cela ne peut pas être recommandé, mais vous pouvez créer un wrapper appelable par COM pour votre bibliothèque C #, puis créer un projet exe VB6 ActiveX qui délègue des appels à votre bibliothèque C #.

Pourquoi ne pouvez-vous pas charger le runtime .net dans votre espace de processus? Il est possible d’héberger le runtime .net et d’appeler vers .net à l’aide de COM.