usan titulos son que por para pagina las etiquetas ejemplo cursiva cuantos cabecera com guid

titulos - ¿Qué es COM?



tags h2 (7)

Busqué mucho, pero no pude comprender toda la idea. Alguien me puede decir:

  • ¿Qué es COM en realidad?
  • ¿Cómo funcionan los GUID y cómo los usa COM?
  • ¿Cómo resuelve COM los problemas de las diferentes versiones de DLL?

¿O al menos, señalarme un buen artículo en algún lugar que explique estos conceptos? ¡Gracias!


COM es el "Modelo de objeto componente". Es una de las primeras tecnologías diseñadas para permitir la "reutilización binaria" de componentes ... Originalmente, fue la reescritura de lo que fue, en el marco temporal de Microsoft Office circa 1988-1992, denominado Dynamic Data Exchange (DDE), un Tecnología diseñada para permitir que las diversas aplicaciones de Office se comuniquen entre sí. El primer intento de reescritura se llamó OLE-Automation (vinculación e incrustación de objetos). Pero cuando terminaron, lo cambiaron a COM.

Cómo funciona:

Esencialmente, antes de COM, cuando un componente cliente quería usar un componente (escrito como una biblioteca C ++), tenía que compilarse CON la biblioteca, de modo que pudiera saber exactamente cuántos bytes en el archivo binario compilado para encontrar cada método o función llamada.

Con COM, hay un mecanismo definido sobre cómo se estructurarán estos métodos, y luego el compilador produce un archivo separado (llamado biblioteca de tipos o un archivo de Lenguaje de Definición de Interfaz (IDL), que contiene todos los datos de compensación de esta función.

Luego, como usuario del componente, debe "registrarlo", que escribe toda esta información (desactivada con GUID) en el registro del sistema operativo, donde cualquier aplicación cliente puede acceder a él, y leyendo los datos del registro. puede saber dónde se encuentra en el archivo binario para encontrar cada método o punto de entrada de clase.


COM es un método para desarrollar componentes de software, un exe binario pequeño, que proporciona servicios para aplicaciones, sistemas operativos y otros componentes. El desarrollo de componentes COM personalizados es como desarrollar una API orientada a objetos. GUID es una ID única global y se utiliza para identificar un componente COM de forma única.

Puedes referir un muy buen libro de Dale Rogerson para más detalles. Dentro de COM


COM es un montón de cosas diferentes. Recomiendo el libro de Don Box, Essential COM como una buena manera de aprender.

Como mínimo, un objeto COM es un objeto que expone una única interfaz, IUnknown. Esta interfaz tiene 3 métodos, AddRef, Release y QueryInterface. AddRef / Release permite que el objeto se cuente como referencia y se elimine automáticamente cuando se libera la última referencia. QueryInterface le permite interrogar el objeto en busca de otras interfaces que admite.

La mayoría de los objetos COM son detectables. Se registran en el registro bajo HKEY_CLASSES_ROOT con un GUID de identificación, llamado CLSID (ID de clase). Esto le permite llamar a CoCreateInstance para crear una instancia de un objeto registrado si conoce un GUID. También puede consultar el registro a través de una API COM para el CLSID que respalda un ProgId (id del programa), que es una cadena que identifica el objeto.

Muchos objetos COM tienen reglas de escritura que especifican las interfaces y los métodos que admite el objeto, así como IDispatch que tiene un método, Invocar, que le permite llamar de forma dinámica a los métodos en el objeto. Esto permite que el objeto se use desde lenguajes de script que no admiten la escritura fuerte.

Algunos objetos admiten la ejecución en un proceso diferente, en un subproceso diferente o en una máquina diferente. COM admite la ordenación de este tipo de objetos. Si es posible, un contador de referencias estándar puede usar la biblioteca de caracteres del objeto para calcular las llamadas al objeto, pero también se pueden proporcionar referencias de referencias personalizadas.

Y hay mucho más en los objetos COM, apenas estoy rascando la superficie.


COM habilita software reutilizable. Al igual que los bloques de construcción, puede crear objetos COM (o ahora Assemblies en .NET) para proporcionar funcionalidad a una pieza más grande de software. He usado COM para proporcionar integración de base de datos para Excel y MS BizTalk. Software como MS BizTalk usa COM / Assemblies para ampliar las capacidades de procesamiento de un proceso estándar; puede insertar un COM en el flujo de trabajo del mensaje para hacer más procesamiento del que Microsoft implementa. COM también permite el uso de los Servicios de componentes que proporcionan una agrupación de objetos, seguridad y una interfaz de control integradas.

Wikipedia tiene una buena definición de GUID . Tenga en cuenta que Microsoft tiene un formato que no se usa necesariamente en el resto de la comunidad de desarrollo.

COM por sí mismo no resuelve los problemas de versión DLL. Le permite extender el software de forma incremental si utiliza la capacidad de control de versiones COM. Entonces, si tiene una aplicación que utiliza un COM para convertir XML a texto (por ejemplo) y desea mejorar, puede crear una nueva versión (2.0) que puede desplegar lentamente a medida que actualiza la aplicación de origen para usar la nuevo COM. De esta manera usted podría (si es necesario) tener una instrucción de cambio que aún pueda usar el COM antiguo si así lo requieren las limitaciones del sistema, o usar el nuevo (serían DLL diferentes).


Su pregunta es un poco grande para una explicación completa aquí. Una introducción rápida de alto nivel a COM se puede encontrar en el libro Entendiendo ActiveX y OL E. Una introducción más detallada pero aún introductoria es Dentro de COM . El mejor libro sobre el tema es Don Box''s Essential COM .

Un par de respuestas rápidas:

  • COM es una interfaz binaria estándar para objetos. Permite que varios programas escriban en interfaces sin que todos tengan que haber sido escritos en el mismo idioma con el mismo compilador. También hay servicios relacionados disponibles.
  • Los GUID son números únicos a nivel mundial que COM utiliza para identificar interfaces.
  • COM no resuelve diferentes problemas de versión de DLL. Solo permite que se registre una sola DLL para cada GUID.

Vista de 10,000 pies

COM es el mecanismo de comunicación para componentes de software. Por ejemplo, puede interactuar con las interfaces COM (interoperabilidad COM en .NET) para usar una funcionalidad no expuesta a través de una interfaz común (ensamblado .NET).

Los GUID se explican bastante bien en Wikipedia http://en.wikipedia.org/wiki/Globally_Unique_Identifier

Siempre entendí que los archivos LIB son archivos de objetos para el vinculador de C ++. Contienen el código para todos los objetos en un archivo cpp. El compilador se optimiza cuando se vincula sin tener en cuenta partes del archivo objeto que no necesita.

Alguien, por favor, aclare porque estoy seguro de que maté algo de esto.


COM es el Modelo de objetos componentes de Microsoft, una interfaz compatible con binarios para que los programas escritos en varios idiomas interactúen entre sí. Es el "paso evolutivo" entre las tecnologías OLE y .NET.

Si desea obtener más información acerca de COM desde la perspectiva de C ++, eche un vistazo a la COM esencial de Don Box, o Internals ATL by Rector and Sells.

El grupo microsoft.public.vc.atl es probablemente el mejor lugar para hacer preguntas para las que no puede obtener respuestas aquí. Es principalmente un grupo de noticias de ATL, pero también parece ser el grupo de noticias con más tráfico para las preguntas generales de COM. (solo prepárate para la impaciencia y la impaciencia del habitual grupo de noticias)