2009-03-11 11 views
28

Estoy planeando utilizar varios objetos que están expuestos como objetos COM. Para que sean más fáciles de usar, me gustaría envolverlos como objetos C#. ¿Cuál es el mejor enfoque para esto?La mejor manera de acceder a los objetos COM desde C#

+0

Mads Torgersen el lenguaje "gerente de producto" para C# dijo en el último podcast DeepFriedBytes sobre C# que agregaron o están agregando ciertas características para facilitar la interoperabilidad con COM. Si pudiera recordar lo que era ... – f3lix

+0

Creo que te estás refiriendo al tipo de variable 'dinámica' que viene en C# 4.0. Esta nueva palabra clave lo hace más fácil, pero ya es posible con C#. –

Respuesta

29

Si la biblioteca ya está registrado, puede realizar los siguientes pasos para tener Visual Studio generar un ensamblado de interoperabilidad para usted:

  • Abierto a su proyecto de Visual Studio.
  • Haga clic derecho en 'Referencias' (justo debajo del proyecto en su Explorador de soluciones) y seleccione 'Agregar referencia'.
  • Seleccione la pestaña COM.
  • Seleccione el Componente con el que desea interoperar.
  • Seleccione 'ok'.

Esta será una clase o un conjunto de clases de C# que envuelva todas las cosas de la interfaz COM con una clase C# normal. Entonces simplemente lo usa como cualquier otra biblioteca de C#. Si la importación de la referencia funcionó bien, puede explorarla como cualquier otra referencia y los métodos/estructuras/clases/constantes deberían aparecer en ese espacio de nombres e intellisense.

Esto le permitirá comenzar, al menos. Si esto se implementa en un entorno corporativo o uno que puede controlar, esto puede ser todo lo que necesita.

4

Usted puede (inicialmente) solo importar la referencia. Si necesita más control (u obtiene errores de la importación de VS), puede usar tlbimp en el SDK de Windows. Esto creará los ensamblados de interoperabilidad. Puede obtener definiciones de clases a partir de metadatos.

EDIT: Esto es en realidad mucho más complicado si se quiere trabajar con 64 bits

+0

¿Por qué es más difícil o diferente? simplemente use el tlbimp del conjunto de herramientas x64 .Net –

+0

Supongo que cualquier ensamblado dependiente que use una arquitectura de 32 bits. Sé que las versiones de 64 bits de las aplicaciones que usan ensamblados COM Interop de 32 bits no funcionan y viceversa. Siempre tuve la impresión de que x64 podía ejecutar cualquier arquitectura, pero aparentemente ese no es el caso. –

Cuestiones relacionadas