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 buscando 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?
13
Respuestas:
Aprender el IUnknown es el primer paso.
Una buena interfaz COM que es adecuada para el estudio de principiantes es la interfaz IStream. Puede practicar COM implementando la interfaz IStream utilizando muchos tipos de formas de almacenamiento de datos.
Añadido 28/09/2012:
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 sea intimidante para los alumnos, 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 asumas" explicando cómo estos trucos inusuales pueden romper tu código.
Los diseñadores de COM usan el Principio de sustitución de Liskov (la "L" en SÓLIDO ) para asegurarse de que sus múltiples interfaces y el uso de trucos no invaliden el razonamiento básico de OOP o la operación del programa.
Si su proyecto no usa estos trucos, está bien ver COM solo desde el punto de vista de OOP. Si su proyecto usa estos trucos, necesitará ver COM como código auto modificable.
fuente
La razón principal para COM es proporcionar una interfaz de comunicaciones orientada a objetos entre una aplicación y otras aplicaciones y archivos DLL que pueden vivir en diferentes espacios de memoria, y entre objetos que pueden tener diferentes representaciones internas de objetos.
Algo para recordar cuando se aprende COM es que en ese momento C ++ era el rey y las aplicaciones llamadas dll usaban C. No había 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 hace que sea un poco más fácil usar COM también.
Un par de libros que encontré útiles en la época
http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1
http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4
hth
fuente
Originalmente aprendí sobre COM del libro Learning DCOM (DCOM es solo una extensión de COM, el libro trata principalmente de COM). Tiene más de diez años y debería ser barato si lo usa (ya que COM ya no es exactamente atractivo, ni siquiera en el mundo de Microsoft, aunque 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 utiliza alguna implementación de que cuando despliegas Subraya la mayor parte de la tecnología propia de Microsoft.
El sistema admite algunas características que eran geniales antes de que todo se gestionara (como el recuento de referencias y la autodescripción (a través de IDispatch)).
fuente
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 VB (controles ActiveX) u hoja de cálculo de Excel. Cuando pega una imagen en Word, también usa COM, incrustando una aplicación separada en Word. Menos popular es DCOM, que es llamar a objetos remotos, generalmente hay formas más simples de hacerlo.
Entonces, Com / ActiveX / DCOM era 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 allí que existen a las que puede llamar desde una aplicación dotnet o Java o C ++. (No 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 a las interfaces IDispatch, lo que probablemente sea una gran solución que debe considerar.
Si necesita conocer muchos detalles, realmente necesita usar C ++ y ATL, llame a las API de C como CoCreateInstance. Sin embargo, evite esto si puede, ya que es una tecnología antigua y no es muy útil, 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 System.Management en dotnet.
fuente
Los siguientes podrían ser útiles COM overviewM:
http://www.youtube.com/watch?v=-uodiz25YNE
http://progtutorials.tripod.com/COM.htm
El primer video habla sobre la idea general de crear componentes binarios para reutilizar códigos escritos en diferentes idiomas (independientes del idioma) y están en diferentes máquinas (procesos) (ubicación independiente / transparente). Esta tecnología se usa en algunas compañías de software para integrarse con otro software (compañías) en lugar de comprar su software e integrarlo en el suyo 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 Java
CORBA / IIOP
Solo piense en ello 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 que está escrito en C ++ e incluso tal vez esté ubicado en una máquina diferente, no en Su máquina local. ¿Cómo se llama "nuevo", cómo se hacen objetos y se llaman métodos a partir de ellos?
Los siguientes libros que he visto personas que codifican COM tienen cualquiera de ellos en sus estanterías:
Taller de desarrolladores para COM y ATL 3.0
Inside Com
COM esencial
fuente