Was muss ich tun, um einen „Out-of-Proc“-COM-Server in C# zu implementieren?
Frage
Ich versuche, einen in C# geschriebenen „Out-of-Proc“-COM-Server zu implementieren.Wie mache ich das?
Ich benötige, dass der C#-Code „out of proc“ meiner C++-Hauptanwendung ist, da ich die .NET-Laufzeitumgebung nicht in meinen Hauptprozessbereich laden kann
WARUM?:
Mein C++-Code befindet sich in einer DLL, die in viele verschiedene Kunden-EXE-Dateien geladen wird, von denen einige unterschiedliche Versionen der .NET-Laufzeit verwenden.Da in einen einzelnen Prozess nur eine Laufzeit geladen werden kann, scheint es meine beste Wahl zu sein, meinen C#-Code in einen anderen Prozess zu legen.
Lösung
Sie können COM+-Komponenten mit System.EnterpriseServices.ServicedComponent erstellen.Folglich können Sie Out-of-Proc- und In-Proc-(Client-)Komponentenaktivierungen erstellen und alle COM+-Vorteile von Pooling, Remoting, der Ausführung als Windows-Dienst usw. nutzen.
Andere Tipps
Hier Wir können lesen, dass es möglich ist, aber die Exe wird als Bibliothek geladen und nicht wie eine Exe in einem eigenen Prozess gestartet.Ich weiß nicht, ob das ein Problem für Sie ist?Es enthält auch einige mögliche Lösungen, wenn Sie möchten, dass es sich wie ein echter Out-of-Process-COM-Server verhält.Aber vielleicht ist es besser, eine andere Art der Kommunikation zwischen Prozessen zu verwenden.Wie .Net Remoting.
Ich kann dies nicht empfehlen der Weg, aber Sie könnten einen COM-aufrufbaren Wrapper für Ihre C#-Bibliothek erstellen und dann ein VB6-ActiveX-Exe-Projekt erstellen, das Aufrufe an Ihre C#-Bibliothek delegiert.
Warum können Sie die .net-Laufzeitumgebung nicht in Ihren Prozessbereich laden?Es ist möglich, die .net-Laufzeitumgebung zu hosten und .net über COM aufzurufen.