2008-08-27 6 views
8

J'essaie d'implémenter un serveur COM "out of proc" écrit en C#. Comment puis-je faire cela?Que dois-je faire pour implémenter un serveur COM "out of proc" en C#?

J'ai besoin que le code C# soit "hors de proc" de mon application C++ principale, parce que je ne peux pas charger l'exécution .NET dans mon espace de processus principal (POURQUOI: Mon code C++ est dans une DLL chargée dans De nombreux EXE clients différents, dont certains utilisent des versions différentes du runtime .NET Comme il ne peut y avoir qu'un seul runtime chargé dans un seul processus, mon meilleur pari semble être de mettre mon code C# dans un autre processus.)

Répondre

5

Vous pouvez créer des composants COM + en utilisant System.EnterpriseServices.ServicedComponent. Par conséquent, vous serez capable de créer une activation de composant hors-proc et in-proc (client) ainsi que tous les avantages COM + de pooling, d'accès distant, d'exécution sous Windows, etc.

0

Je ne peux pas recommander ceci comme de la manière, mais vous pouvez créer un wrapper appelable COM pour votre bibliothèque C#, puis créer un projet exe VB6 ActiveX qui délègue des appels à votre bibliothèque C#.

1

Here nous pouvons lire que c'est possible, mais l'exe sera chargé comme une bibliothèque et non commencé dans son propre processus comme un exe. Je ne sais pas si c'est un problème pour toi? Il contient également des solutions possibles si vous voulez le faire agir comme un vrai serveur com hors processus. Mais peut-être que l'utilisation d'un autre moyen de communication inter-processus est préférable. Comme .Net Remoting. Pourquoi ne pouvez-vous pas charger le runtime .net dans votre espace de processus?

0

Pourquoi? Il est possible d'héberger l'exécution .net et d'appeler .net en utilisant COM.

+1

Mon produit est une DLL qui est utilisé par d'autres sociétés. Ils peuvent écrire leur application en utilisant différentes versions de l'environnement d'exécution .NET (ou un outil non .NET). Une seule version du runtime .NET peut être chargée dans un processus à la fois, donc je veux éviter une version séparée de ma DLL pour chaque runtime .NET –

Questions connexes