Создать Суррогатный сервер COM (exe) в C # - PullRequest
8 голосов
/ 18 мая 2009

Я знаю, как создать COM DLL (библиотеку классов) в C #. Можно ли создать COM Surrogate EXE с помощью C #?

Это будет автономный сервер, способный запускать и размещать COM-объекты, которые затем будут доступны для COM-клиентов.

Ответы [ 3 ]

5 голосов
/ 18 мая 2009

Суррогатный процесс по умолчанию для COM - то, что содержит COM DLL, то есть COM Surrogate - это dllhost.exe. Можно создать суррогатный процесс в C ++. Эта статья объясняет как.

Но эти API не отображаются в оболочках как часть библиотеки базовых классов в .NET Framework. Если вы хотите писать, чтобы писать только управляемый код, вам нужно что-то еще.

Я вижу пару вариантов.

  1. Visual Studio SDK , бесплатная загрузка, предназначенная для разработчиков, которые хотят расширить Visual Studio. В этом SDK есть класс lib с такими обертками. В частности, посмотрите на класс ISurrogate .
    НО, лицензия VS SDK говорит, что SDK можно использовать только для продуктов, которые расширяют или повышают ценность Visual Studio. Я не юрист, но это мое понимание лицензии, которое довольно ясно. Эти термины означают, что VS SDK не будет полезен для общего построения приложений.
    Остается один вопрос: Как именно вы технически используете VS SDK для создания суррогата COM, используя только код C #? Опять же, здесь я не знаю. Я кратко искал в документации руководства по использованию оболочки ISurrogate, но ничего не нашел.
  2. Используйте код в этой статье .
    В статье рассматриваются различные аспекты взаимодействия COM и .NET. В конце статьи предлагается исходный код для создания собственного COM-сервера в C #, а также все вызовы p / invoke для CoRegisterClassObject () и друзей.
4 голосов
/ 23 мая 2010

Я хотел сделать то же самое и нашел превосходный пример проекта CSExeCOMServer в All-In-One Code Framework. Он фактически восстанавливает обычную логику COM-сервера с помощью .NET и собственных вызовов Windows API. Но это выглядит все еще слишком сложным. Я полагаю, что не существует простого и быстрого способа представить объекты .NET как COM на внепроцессном сервере, и это не архитектура выбора.

2 голосов
/ 18 мая 2009

Один из вариантов, если вам нужен COM-компонент вне процесса, - разместить DLL в COM + через обслуживаемые компоненты . Это поддерживает только dll, но вы могли бы написать исполняемый файл оболочки (для автономного использования), который просто обращается к dll.

Не так просто, как VB, но работает.

Я помню, что кто-то показывал мне более прямой путь (без COM +), но я не могу на всю жизнь вспомнить, что это было ...

...