2009-05-18 12 views
8

Sé cómo crear una DLL COM (una biblioteca de clases) en C#. ¿Es posible crear un COM Surrogate EXE usando C#?Crear servidor sustituto COM (exe) en C#

Este sería un servidor independiente capaz de iniciar y alojar objetos COM, que luego serían accesibles para los clientes COM.

Respuesta

2

Una opción, si desea un componente COM fuera de proceso, es alojar un dll en COM + a través del serviced components. Esto solo es compatible con dll, pero podrías escribir un shell exe (para uso independiente) que simplemente difiere al dll.

No es tan simple como VB, pero funciona.

sí recuerdo que alguien me muestra una forma más directa (sin COM +), pero no puedo por la vida de mí recordar lo que era ...

5

El proceso suplente por defecto para COM - lo que alberga COM DLL, también conocido como COM Surrogate - es dllhost.exe. Es posible crear un proceso sustituto en C++. This article explica cómo.

Pero esas API no están expuestas en envoltorios como parte de la biblioteca de clases base en .NET Framework. Si desea escribir para escribir solo código administrado, necesita algo más.

Veo un par de opciones.

  1. The Visual Studio SDK, una descarga gratuita que está destinada a los desarrolladores que desean extender Visual Studio. Dentro de ese SDK, hay una lib de clase que tiene dichos wrappers. En particular, mira the ISurrogate class.
    PERO, la licencia VS SDK dice que el SDK está bien para usar solo para productos que extienden o agregan valor a Visual Studio. No soy abogado, pero esa es mi comprensión de la licencia, que es bastante clara. Estos términos significan que el VS SDK no sería útil para la creación general de aplicaciones.
    La pregunta restante es: ¿cómo se usa el VS SDK técnicamente para producir un sustituto de COM utilizando solo el código C#? Una vez más, aquí no sé. Busqué en los documentos brevemente las guías sobre el uso del contenedor ISurrogate, pero no encontré ninguna.
  2. Usa el código en this article.
    El artículo explora una serie de aspectos diferentes sobre la interoperabilidad COM y .NET. Hacia el final del artículo, ofrece un código fuente para construir su propio servidor COM en C#, completar con todas las llamadas p/invocar a CoRegisterClassObject() y sus amigos.
4

Quería hacer lo mismo y encontré el excelente ejemplo de proyecto CSExeCOMServer en All-In-One Code Framework. En realidad, reconstruye la lógica del servidor COM normal mediante .NET y llamadas nativas a la API de Windows. Pero parece todo demasiado complicado. Supongo que no hay una manera simple y rápida de exponer objetos .NET como COM en un servidor fuera de proceso y no es la arquitectura de elección.

+0

Bonito enlace de muestra. –

Cuestiones relacionadas