El mejor lugar para aprender el Modelo de objetos componentes [cerrado]

12

Necesito aprender COM para mi proyecto actual. Soy un novato y no he podido encontrar buenos puntos de partida para COM. He estado buscando en MSDN y en Google ... Encontré algunos artículos interesantes en codeproject.com, pero no estoy satisfecho. ¿Por qué usamos COM? ¿Por qué existe? ¿En qué lugares existe? ..... y así sucesivamente ... Entonces, ¿podría decirme dónde puedo encontrar respuestas a estas preguntas?

    
pregunta Chani 09.05.2011 - 07:27

5 respuestas

16
  • En primer lugar, COM es como la programación orientada a objetos. La interfaz COM es una interfaz abstracta.
  • COM tiene una ventaja sobre el OOP incorporado de cada idioma, ya que puede tener clases COM implementadas en diferentes idiomas y / o compiladas por diferentes versiones de compiladores, y aún podrán interactuar. Esto se denomina "interfaz binaria de aplicación" (ABI)
  • COM utiliza el recuento de referencias. Puede ser molesto al principio, pero tan pronto como aprenda sobre punteros inteligentes, su vida será mucho más fácil y encontrará que el concepto de conteo de referencias es muy fácil de entender.
  • COM utiliza una forma extraña de conversión de clase, a saber, "Interfaz de consulta".

El primer paso es aprender IUnknown . / p>

Una buena interfaz COM que es adecuada para el estudio de principiantes es la interfaz IStream. Puede practicar COM implementando la interfaz de IStream utilizando muchos tipos de formas de almacenar datos.

Añadido 2012/09/28:

Después de que se inventó el mecanismo COM, la gente de Microsoft descubrió que estos mecanismos abren la puerta a trucos de programación inusuales que no son OOP ortodoxos. En el nivel más bajo, IUnknown.QueryInterface es solo un método; puede hacer cualquier cosa Estos trucos hacen que COM intimide a los estudiantes, ya que pueden invalidar el razonamiento básico que se puede tomar prestado de OOP.

La documentación de Microsoft en MSDN pasa mucho tiempo diciendo "COM no es ..." o "No hagamos ninguna suposición" explicando cómo estos trucos inusuales pueden romper tu código.

Los diseñadores COM usan el principio de sustitución de Liskov (la "L" en SOLID ) para asegurarse sus múltiples interfaces y el uso de trucos no invalidan el razonamiento OOP básico ni el funcionamiento del programa.

Si su proyecto no usa estos trucos, está bien ver COM solo desde el punto de vista de la POO. Si su proyecto utiliza estos trucos, necesitará ver COM como código de auto-modificación.

  

(Broma: Tuvimos que pasar tanto tiempo con L que normalmente ignoramos los otros cuatro principios).

    
respondido por el rwong 09.05.2011 - 07:47
9

La razón principal de COM es proporcionar una interfaz de comunicaciones orientada a objetos entre una aplicación y otras aplicaciones y dll que pueden vivir en diferentes espacios de memoria y entre objetos que pueden tener diferentes representaciones de objetos internos.

Algo que hay que recordar cuando se aprende COM es que, en el momento en que C ++ era el rey y las aplicaciones llamadas dll's usaban C. No había un ABI común (como dice @rwong) y COM era la solución de Microsoft.

Probablemente valga la pena echar un vistazo a Active Template Library (ATL) para Visual Studio, lo que también facilita el uso de COM.

Un par de libros que encontré útiles en el pasado

enlace

enlace

hth

    
respondido por el daven11 09.05.2011 - 15:37
7

Originalmente aprendí sobre COM del libro Learning DCOM (DCOM es solo una extensión de COM, el libro es sobre todo acerca de COM). Tiene más de diez años y debería ser barato si lo usas (ya que COM ya no es muy popular, ni siquiera en el mundo de Microsoft, a pesar de que todavía se usa para interoperabilidad).

La razón principal para que exista COM es facilitar el desarrollo basado en componentes, lo que básicamente significa que en lugar de vincular bibliotecas cuando compila su código, hace referencia a una interfaz (la descripción de cómo comunicarse con un componente externo) y usa alguna implementación de eso cuando implementas. Es la base de la mayor parte de la tecnología de Microsoft.

El sistema admite algunas funciones que eran geniales antes de que todo se gestionara (como el recuento de referencias y la autodescripción (a través de IDispatch)).

    
respondido por el Deckard 09.05.2011 - 07:59
5

COM es un estándar creado en los años 90 para permitir que diferentes piezas de software se comuniquen entre sí. Lo más importante es el estándar binario que permite que una pieza de software cree o se una a un objeto y luego llame a esa interfaz. Esto le permite hacer cosas como crear una DLL en C ++ a la que puede llamar una página ASP (Objetos COM), o crear un control en Delphi que puede colocar en un cuadro de diálogo de VB (controles ActiveX) o en una hoja de cálculo de Excel. Cuando pegas una imagen en Word, también usa COM, incrustando una aplicación separada en word. Menos popular es DCOM, que consiste en llamar a objetos remotos, por lo general hay formas más simples de hacerlo.

Así que Com / ActiveX / DCOM fue muy popular hace 10 años con VB, VBA, C ++ / ATL, Delphi. Sin embargo, Dotnet es mucho más simple y C # ha reemplazado la mayoría del uso de COM y VB, etc.

Todavía hay muchas interfaces COM que existen a las que quizás quieras llamar desde una aplicación dotnet o Java o C ++. (No lo dices)

Si necesita llamar a las interfaces COM, VB es la forma más sencilla de hacerlo. En Dotnet 4.0 C # tiene la palabra clave dinámica que hace que sea mucho más fácil llamar interfaces IDispatch, que probablemente sea una gran solución que debería tener en cuenta.

Si necesita conocer muchos detalles, realmente necesita usar C ++ y ATL, llame a las API de C como CoCreateInstance. Evite esto si puede, ya que es una tecnología antigua y no tiene mucho uso, siga las recomendaciones anteriores.

No estoy seguro de qué software de monitoreo está viendo, pero es probable que esté disponible a través de las clases de System.Management en dotnet.

    
respondido por el Richard 09.05.2011 - 22:14
2

Lo siguiente podría ser útil para la visión general de COM:

El primer video habla sobre la idea general de crear componentes binarios para reutilizar códigos escritos en diferentes idiomas (idiomas independientes) y en diferentes máquinas (procesos) (ubicación independiente / transparente). Esta tecnología se utiliza en algunas compañías de software para integrarse con otro software (compañías) en lugar de comprar su software e integrarlo en su propio software o escribir los códigos desde cero en sus sistemas.

Esta tecnología tiene tres versiones diferentes (implementaciones):

OLE / COM / DCOM / ActiveX para desarrolladores de C ++ (ATL se utiliza para facilitar el trabajo del programador)

JavaBeans / RMI / EJB para desarrolladores de Java

CORBA / IIOP

Piénselo como una tecnología que resulta útil cuando tiene su software escrito en Java y desea agregarle una funcionalidad que ya existe en un paquete pero está escrita en C ++ e incluso quizás se encuentre en diferentes máquina no en su máquina local. ¿Cómo llamas "nuevo", cómo haces objetos y métodos de llamada a partir de ellos?

Los siguientes libros que he visto personas que hacen codificación COM tienen cualquiera de ellos en sus estantes:

  • Taller de desarrolladores para COM y ATL 3.0

  • Inside Com

  • COM esencial

respondido por el Mahshid Zeinaly 07.11.2013 - 23:17

Lea otras preguntas en las etiquetas