2009-05-04 20 views
6

No puedo entender las diferencias entre estos términos.COM/OLE/ActiveX/IDispatch confusion

¿Son sinónimos COM y ActiveX?

¿El objeto ActiveX es solo un objeto COM que expone IDispatch?

Muchas páginas anteriores de MSDN mencionan IDispatch sin ningún contexto COM. ¿Tiene un historial separado, y fue introducido recientemente bajo el 'paraguas' COM más adelante en su ciclo de vida?

¿Dónde encaja OLE? ¿Su presencia (considerable) en el nombramiento de MFC y en MSDN en general, todo solo legado?

Wikipedia da alguna idea, pero no mucho. No pude encontrar una referencia más en profundidad.

Respuesta

7

encontrado algunas citas de COM Programming by Example:

Otra cosa que encontrará rápidamente con COM es que el marketing tenía un viaje día de campo con la terminología. En lugar de ayudando a promover la comprensión, encontrará que en la mayoría de los casos promueve el misterio . ... OLE, ActiveX, Remotable Objetos - ¿cuál es el significado de esta semana? ...

COM evolucionó a partir de la solución a un problema específico - cómo permitir procesador de una palabra para editar la hoja de cálculo en una carta sin que el usuario tenga que salir el procesador de textos para hacerlo. Esta solución se llamó OLE. ... Sin embargo, con la segunda versión de OLE (OLE 2), sus creadores OLE32.DLL modificado para exponer más de la funcionalidad básica de OLE para que su API podría ser utilizado para permitir que cualquier aplicación para Acess la funcionalidad de otro. Esta API, que no ha cambiado mucho desde 1993, es lo que se considera la API COM . ...

Una vez que el COM API fue expuesto, Microsoft lo utilizaron para crear lo que eran entonces llamados controles OLE para permitir controles sofisticados (por ejemplo, botones que en espiral, cuadros de lista que se puede escuchar música) escrito en Visual C++ sean accesible para aplicaciones de Visual Basic . Eventualmente, esta misma tecnología se utilizó para permitir que un control fuera descargado y utilizado por su navegador web . En este punto, el nombre cambió a controles ActiveX o simplemente ActiveX puro puramente por razones de marketing . Aunque puede empaquetar cualquier funcionalidad de en un control ActiveX, sus requisitos han sido especializados para admitir un control de interfaz de usuario .

Sigo sintiendo curiosidad acerca de la última oración: ¿debe un objeto COM cumplir algunos requisitos adicionales para calificar como control ActiveX? - pero es suficiente para dejarlo ir.

Gracias por sus respuestas!

+1

"debe un objeto COM satisfacer algunos requisitos adicionales para calificar como un control ActiveX" Sí. Aunque no estoy seguro de lo que son. Probablemente es solo que tiene que implementar una interfaz particular. –

+1

No hay una especificación rígida de esto. Incluso los documentos dicen que los contenedores deberían degradarse graciosamente cuando un control ActiveX no implementa una interfaz. –

+0

La especificación original para controles ActiveX tenía las interfaces necesarias para hacer un control útil en Internet Explorer y/o Visual Basic. Pero esos conjuntos de interfaces cambiaron con el tiempo, y las aplicaciones se volvieron más tolerantes con las interfaces faltantes, por lo que, finalmente, cualquier elemento que admita la interfaz COM IUnknown podría considerarse un componente ActiveX. –

4

ActiveX es marketing-ese para COM, aunque ActiveX se utiliza generalmente en el contexto de "controles ActiveX" que son objetos de GUI.

IDispatch es una interfaz implementada por objetos COM para que los programas cliente puedan invocar sus métodos dinámicamente en tiempo de ejecución (último enlace), en lugar de en tiempo de compilación donde todos los métodos y tipos de argumentos deben conocerse antes de hora.

OLE es la versión anterior de COM.

1

Respecto a OLE: COM tiene sus raíces en OLE. Pero hoy, se puede considerar que OLE está construido sobre COM y se usa principalmente para lo que su nombre sugiere: vinculación e integración de documentos. Mientras que COM define solo un par de interfaces (IUnknown, IClassFactory, IMalloc, etc.), OLE agrega un conjunto completo de interfaces adicionales como IMoniker, IOleItemComtainer, etc.

En resumen: COM es la base, ActiveX y OLE son capas en la parte superior de COM.

+0

Actualmente estoy trabajando en un tema similar y durante este encuentro dos enlaces que pueden ser útiles aquí: http://msdn.microsoft.com/en-us/library/aa751972(v=vs.85).aspx #ActiveX_Controls '... En otras palabras, un control, como mínimo, es un objeto COM que admite la interfaz IUnknown y también se autorregistra' http://support.microsoft.com/kb/159621/en -us – juniper