Confusión de COM / OLE / ActiveX / IDispatch
Pregunta
No puedo comprender las diferencias entre estos términos.
¿Son sinónimos COM y ActiveX?
¿Es el objeto ActiveX solo un objeto COM que expone IDispatch?
Muchas de las páginas antiguas de MSDN mencionan IDispatch sin ningún contexto COM. ¿Tiene un historial separado y se presentó en el 'paraguas' de COM más adelante en su ciclo de vida?
¿Dónde encaja OLE? ¿Es su (considerable) presencia en la denominación de MFC y en MSDN en general, todo solo legado?
Wikipedia da una idea, pero no mucho. No pude encontrar una referencia más detallada.
Solución
Encontré algunas citas de Programación COM por ejemplo :
Otra cosa que encontrarás rápidamente con COM es que el marketing tuvo un viaje de campo. Día con la terminología. En lugar ayudando a promover la comprensión, Usted encontrará en la mayoría de los casos que promueve misterio. ... OLE, ActiveX, Remoto Objetos - cual significa lo que esto ¿semana? ...
COM evolucionó de la solución a una problema específico - cómo permitir una palabra procesador para editar la hoja de cálculo en una carta sin que el usuario tenga que salir El procesador de textos para hacerlo. Esta La solución se llamaba OLE. ... Sin embargo, con la segunda versión de OLE (OLE2), sus creadores modificaron OLE32.DLL para Exponer más de la funcionalidad básica. de OLE para que su API pueda ser utilizada para permitir que cualquier aplicación acceda al Funcionalidad de otro. Esta API, que no ha cambiado mucho desde 1993, Es lo que se considera el COM. API. ...
Una vez que la API de COM fue expuesta, Microsoft lo usó para crear lo que eran entonces llamados controles OLE para permitir controles sofisticados (por ejemplo, botones esa espiral, lista de cuadros que juegan música) escrita en Visual C ++ para ser accesible a Visual Basic aplicaciones Eventualmente este mismo La tecnología fue utilizada para permitir un control. para ser descargado y utilizado por su web navegador. En este punto, el nombre cambiado a los controles ActiveX o simplemente ActiveX simple solo para marketing razones. Aunque puedes empaquetar cualquier funcionalidad en un control ActiveX, sus requisitos han sido especializada para apoyar a un usuario control de interfaz.
Todavía siento curiosidad por la última oración: ¿debe un objeto COM cumplir con algunos requisitos adicionales para calificar como control ActiveX? - pero es suficiente para dejarlo ir.
¡Gracias por tus respuestas!
Otros consejos
ActiveX es marketing-ese para COM, aunque ActiveX se usa generalmente en el contexto de " Controles ActiveX " que son objetos GUI.
IDispatch es una interfaz implementada por objetos COM para que los programas cliente puedan llamar sus métodos dinámicamente en tiempo de ejecución (enlace tardío), a diferencia de en tiempo de compilación, donde todos los métodos y tipos de argumentos deben conocerse con anticipación. .
OLE es la versión anterior de COM.
Respecto a OLE: COM tiene sus raíces en OLE. Pero hoy en día, se puede considerar que OLE está construido sobre COM y se usa principalmente por lo que su nombre sugiere: vinculación e incrustación de documentos. Mientras que la propia COM solo define un par de interfaces (IUnknown, IClassFactory, IMalloc, etc.), OLE agrega un montón de interfaces adicionales como IMoniker, IOleItemComtainer, etc.
Para resumir: COM es la base, ActiveX y OLE son capas encima de COM.