Что мне нужно сделать, чтобы реализовать COM-сервер «вне процесса» на C#?
Вопрос
Я пытаюсь реализовать COM-сервер «вне процесса», написанный на C#.Как мне это сделать?
Мне нужно, чтобы код C# находился вне процесса моего основного приложения C++, поскольку я не могу загрузить среду выполнения .NET в пространство основного процесса.
ПОЧЕМУ?:
Мой код C++ находится в DLL, которая загружается во множество различных пользовательских EXE-файлов, некоторые из которых используют разные версии среды выполнения .NET.Поскольку в один процесс может быть загружена только одна среда выполнения, лучше всего поместить мой код C# в другой процесс.
Решение
Компоненты COM+ можно создавать с помощью System.EnterpriseServices.ServicedComponent.Следовательно, вы сможете создавать активацию компонентов вне процесса и внутри процесса (клиента), а также все преимущества COM+ по объединению в пулы, удаленному взаимодействию, запуску как службе Windows и т. д.
Другие советы
Здесь мы можем прочитать, что это возможно, но exe-файл будет загружен как библиотека, а не запущен как отдельный процесс, как exe-файл.Не знаю, для тебя это проблема?Он также содержит некоторые возможные решения, если вы хотите, чтобы он действовал как настоящий внепроцессный com-сервер.Но, возможно, лучше использовать другой способ взаимодействия между процессами.Например, .Net Remoting.
Я не могу рекомендовать это, так как путь, но вы можете создать оболочку, вызываемую COM, для вашей библиотеки C#, а затем создать exe-проект VB6 ActiveX, который делегирует вызовы вашей библиотеке C#.
Почему вы не можете загрузить среду выполнения .net в пространство процесса?Можно разместить среду выполнения .net и вызывать .net с помощью COM.