Articulo de referencia

Modelo de objetos de componentes

El Modelo de Objetos Componentes ( COM ) es una tecnología de interfaz binaria para componentes de software de Microsoft que permite utilizar objetos de forma independiente del ...

El Modelo de Objetos Componentes ( COM ) es una tecnología de interfaz binaria para componentes de software de Microsoft que permite utilizar objetos de forma independiente del lenguaje entre diferentes lenguajes de programación , contextos de programación, procesos y máquinas .

COM es la base de otras tecnologías de componentes específicos de dominio de Microsoft, incluidas OLE , OLE Automation , ActiveX , COM+ y DCOM, así como implementaciones como DirectX , Windows Shell , UMDF , Windows Runtime y Browser Helper Object .

COM permite el uso de objetos cuando solo se conoce su interfaz, no su implementación interna. El implementador del componente define interfaces que son independientes de la implementación.

La compatibilidad con múltiples contextos de programación se gestiona recurriendo al objeto para aspectos que serían difíciles de implementar como una funcionalidad. La compatibilidad con múltiples usos de un objeto se gestiona exigiendo que cada objeto se autodestruya mediante el conteo de referencias . El acceso a las interfaces de un objeto (similar a la conversión de tipos ) también lo proporciona cada objeto.

COM está disponible únicamente en Microsoft Windows y en la interfaz de programación de aplicaciones (API) de complemento Core Foundation 1.3 y posteriores de Apple . [ 1 ] Esta última solo implementa un subconjunto de toda la interfaz COM. [ 2 ]

Con el tiempo, COM está siendo reemplazado por otras tecnologías como Microsoft .NET y servicios web (por ejemplo, a través de WCF ). Sin embargo, los objetos COM pueden utilizarse en un lenguaje .NET mediante la interoperabilidad COM .

COM es similar a otras tecnologías de componentes como SOM , CORBA y Enterprise JavaBeans , aunque cada una tiene sus puntos fuertes y débiles.

A diferencia de C++ , COM proporciona una interfaz binaria de aplicación (ABI) estable que no se ve afectada por las diferencias entre compiladores. [ 3 ] Esto hace que el uso de COM sea ventajoso para las bibliotecas C++ orientadas a objetos que serán utilizadas por clientes compilados mediante diferentes compiladores.

Historia

Introducido en 1987, el Intercambio Dinámico de Datos (DDE) fue una de las primeras tecnologías de comunicación entre procesos en Windows . [ 4 ] [ 5 ] Permitía enviar y recibir mensajes en las llamadas conversaciones entre aplicaciones.

Tony Williams, quien participó en la arquitectura de COM, distribuyó dos documentos dentro de Microsoft que adoptaban el concepto de componentes de software: Object Architecture: Dealing With the Unknown – or – Type Safety in a Dynamically Extensible Class Library [ 6 ] en 1988 y On Inheritance: What It Means and How To Use It [ 7 ] en 1990. Estos documentos sentaron las bases de muchas de las ideas detrás de COM.

OLE ( Object Linking and Embedding ), el primer marco de trabajo basado en objetos de Microsoft, se basó en DDE y se diseñó específicamente para documentos compuestos . Se introdujo con Word y Excel en 1991 y posteriormente se incluyó en Windows a partir de la versión 3.1 en 1992. Un ejemplo de documento compuesto es una hoja de cálculo incrustada en un documento de Word. A medida que se realizan cambios en la hoja de cálculo de Excel, estos se reflejan automáticamente en el documento de Word.

En 1991, Microsoft introdujo la tecnología Visual Basic Extension (VBX) con Visual Basic 1.0. Una VBX es una extensión empaquetada en forma de biblioteca de vínculos dinámicos (DLL) que permite colocar objetos gráficamente en un formulario y manipularlos mediante propiedades y métodos . Posteriormente, se adaptó para su uso en otros lenguajes como Visual C++ . Windows 3.1 integró OLE 1.0.

En 1992, Microsoft lanzó OLE 2 con su nuevo modelo de objetos subyacente , COM. La interfaz binaria de aplicación (ABI) de COM era la misma que la ABI de MAPI (lanzada en 1992) y, al igual que esta, se basaba en MSRPC y, en última instancia, en DCE/RPC de The Open Group . COM se creó para reemplazar a DDE, ya que su diseño de conversación basado en texto y mensajería de Windows no era lo suficientemente flexible como para permitir compartir funciones de aplicaciones de forma robusta y extensible. COM introdujo el UUID como identificador.

En 1994, se introdujo la tecnología de control personalizado OLE (OCX), basada en COM, como sucesora de VBX. Al mismo tiempo, Microsoft declaró que OLE 2 se conocería simplemente como "OLE". Windows NT 3.5 y Windows 95 integraron OLE 2.0. [ 8 ]

A principios de 1996, Microsoft encontró un nuevo uso para OCX : ampliar las capacidades de su navegador web. Microsoft renombró algunas partes de OLE relacionadas con Internet como ActiveX y, gradualmente, renombró todas las tecnologías OLE como ActiveX, excepto la tecnología de documentos compuestos que se utilizaba en Microsoft Office .

Más adelante, en 1996, Microsoft extendió COM para que funcionara a través de la red con DCOM . [ 9 ]

En 1997, Windows CE integró soporte para COM. [ 10 ]

MSRPC

El lenguaje COM IDL se basa en el lenguaje DCE/RPC IDL, rico en funcionalidades, con extensiones orientadas a objetos. La implementación de DCE/RPC de Microsoft, MSRPC , se utiliza como mecanismo principal de comunicación entre procesos para los servicios y componentes internos de Windows NT, lo que la convierte en una base obvia.

DCOM

DCOM extiende COM, pasando de simplemente admitir un único usuario con aplicaciones independientes que se comunican en el escritorio de Windows, a activar objetos que se ejecutan bajo diferentes contextos de seguridad y en distintas máquinas de la red. Con ello se añadieron las funciones necesarias para configurar qué usuarios tienen autorización para crear, activar y llamar a objetos, para identificar al usuario que realiza la llamada y para especificar el cifrado necesario para la seguridad de las llamadas.

COM+

Microsoft introdujo Microsoft Transaction Server (MTS) en Windows NT 4 con el fin de proporcionar a los desarrolladores soporte para transacciones distribuidas , agrupación de recursos, aplicaciones desconectadas, publicación y suscripción de eventos, mejor administración de memoria y procesador (subprocesos), así como para posicionar a Windows como una alternativa a otros sistemas operativos de nivel empresarial.

Renombrado como COM+ en Windows 2000, el conjunto de características se integró en el sistema operativo, a diferencia de la serie de herramientas externas proporcionadas por MTS. Al mismo tiempo, Microsoft restó importancia a DCOM como entidad independiente. Los componentes que utilizaban COM+ se gestionaban de forma más directa mediante la capa adicional de COM+, en particular mediante la compatibilidad del sistema operativo con la interceptación. En la primera versión de MTS, la interceptación se añadió posteriormente : al instalar un componente de MTS, se modificaba el Registro de Windows para que llamara al software de MTS, y no directamente al componente.

Windows 2000 incluía actualizaciones del panel de control de Servicios de componentes para configurar los componentes COM+.

Una ventaja de COM+ era que podía ejecutarse en "granjas de componentes". Las instancias de un componente, si estaban codificadas correctamente, podían agruparse y reutilizarse mediante nuevas llamadas a su rutina de inicialización sin descargarlas de la memoria. Los componentes también podían distribuirse (llamarse desde otra máquina). COM+ y Microsoft Visual Studio proporcionaban herramientas para facilitar la generación de proxies del lado del cliente, por lo que, aunque se utilizaba DCOM para realizar la llamada remota, resultaba sencillo para los desarrolladores. COM+ también introdujo un mecanismo de eventos de suscriptor/publicador llamado Eventos COM+ y proporcionó una nueva forma de aprovechar MSMQ (una tecnología que proporciona mensajería asíncrona entre aplicaciones) con componentes llamados Componentes en cola . Los eventos COM+ extienden el modelo de programación COM+ para admitir eventos de enlace tardío (véase Enlace tardío ) o llamadas a métodos entre el publicador o suscriptor y el sistema de eventos.

.NETO

.NET es la tecnología de componentes de Microsoft que reemplaza a COM. .NET oculta muchos detalles de la creación de componentes y, por lo tanto, facilita el desarrollo.

.NET proporciona adaptadores para controles COM de uso común.

.NET puede aprovechar COM+ mediante el System.EnterpriseServicesespacio de nombres, y varios de los servicios que ofrece COM+ se han replicado en .NET. Por ejemplo, el System.Transactionsespacio de nombres proporciona la TransactionScopeclase, que ofrece gestión de transacciones sin necesidad de recurrir a COM+. Del mismo modo, los componentes en cola pueden sustituirse por Windows Communication Foundation (WCF) con un transporte MSMQ .

Existe un soporte limitado para la retrocompatibilidad. Un objeto COM puede usarse en .NET implementando un Runtime Callable Wrapper (RCW). [ 11 ] Los objetos NET que cumplen con ciertas restricciones de interfaz pueden usarse en objetos COM llamando a un COM Callable Wrapper (CCW). [ 12 ] Tanto desde el lado de COM como de .NET, los objetos que usan la otra tecnología aparecen como objetos nativos. Consulte Interop COM .

WCF facilita la solución de varios problemas de ejecución remota de COM. Por ejemplo, permite que los objetos se transfieran de forma transparente por valor a través de los límites de procesos o máquinas con mayor facilidad.

Entorno de ejecución de Windows

Windows Runtime ( WinRT ) es una API basada en COM, aunque una variante mejorada. Gracias a su arquitectura similar a COM, WinRT admite la interfaz desde múltiples contextos de programación, pero se trata de una API nativa no administrada. Las definiciones de la API se almacenan en archivos ".winmd", codificados en formato de metadatos ECMA 335, el mismo formato de metadatos de la CLI que utiliza .NET con algunas modificaciones. Este formato de metadatos permite una sobrecarga significativamente menor que P/Invoke cuando WinRT se invoca desde aplicaciones .NET.

Nano-COM

Nano-COM es un subconjunto de COM centrado en los aspectos de la interfaz binaria de la aplicación (ABI) que permiten realizar llamadas a funciones y métodos entre módulos/componentes compilados de forma independiente. Nano-COM se puede expresar en un archivo de cabecera C++ portable. Nano-COM extiende la ABI nativa de la arquitectura de instrucciones y el sistema operativo subyacentes para admitir referencias a objetos tipados , mientras que una ABI típica se centra en tipos atómicos, estructuras, matrices y convenciones de llamada a funciones.

Un archivo de cabecera Nano-COM define o nombra al menos tres tipos:

  • GUID : identifica un tipo de interfaz.
  • HRESULT : códigos de resultado del método, como S_OK, E_FAIL, E_OUTOFMEMORY
  • IUnknown : tipo base para referencias a objetos; funciones virtuales abstractas para admitir dynamic_cast<T>la adquisición de nuevos tipos de interfaz y el conteo de referencias al estilo de lashared_ptr<T>

Muchos usos de Nano-COM definen dos funciones para acceder a los búferes de memoria asignados por la función llamada como resultados:

  • <NanoCom>Alloc : llamado por las implementaciones de métodos para asignar búferes sin procesar (no objetos) que se devuelven al llamador.
  • <NanoCom>Free : llamada por quienes llaman a un método para liberar los búferes asignados por la función llamada cuando ya no están en uso.

Algunas implementaciones de Nano-COM, como Direct3D, prescinden de las funciones de asignación de memoria y se limitan a utilizar únicamente búferes asignados por quien realiza la llamada.

Nano-COM no tiene noción de clases, apartamentos, serialización, registro, etc. En cambio, las referencias a objetos simplemente se pasan entre límites de funciones y se asignan mediante construcciones de lenguaje estándar (por ejemplo, newel operador C++).

Nano-COM se utiliza actualmente como tecnología ABI base para DirectX / Direct3D / DirectML .

Seguridad

En Internet Explorer

Dado que un control ActiveX (cualquier componente COM) se ejecuta como código nativo, sin protección de aislamiento (sandboxing ), existen pocas restricciones sobre lo que puede hacer. El uso de componentes ActiveX, como los que admitía Internet Explorer , en una página web provocó problemas de infecciones de malware . Microsoft reconoció el problema ya en 1996, cuando Charles Fitzgerald afirmó: «Nunca afirmamos de antemano que ActiveX fuera intrínsecamente seguro». [ 13 ] Las versiones posteriores de Internet Explorer solicitan la confirmación del usuario antes de instalar un control ActiveX, lo que le permite bloquear la instalación.

Como medida de protección, un control ActiveX se firma con una firma digital para garantizar su autenticidad.

También es posible deshabilitar por completo los controles ActiveX o permitir solo unos pocos seleccionados.

Corrupción de procesos

La compatibilidad transparente con servidores COM fuera de proceso fomenta la seguridad del software en términos de aislamiento de procesos . Esto puede ser útil para desacoplar subsistemas de aplicaciones grandes en procesos separados. El aislamiento de procesos limita la corrupción de estado en un proceso, evitando que afecte negativamente la integridad de los demás, ya que solo se comunican a través de interfaces estrictamente definidas. Por lo tanto, solo es necesario reiniciar el subsistema afectado para recuperar un estado válido. Esto no ocurre con los subsistemas dentro del mismo proceso, donde un puntero erróneo en un subsistema puede corromper aleatoriamente a otros subsistemas.

Vinculante

COM es compatible mediante enlaces en varios lenguajes, como C , C++ , Visual Basic , Delphi , Python [ 14 ] [ 15 ] y varios contextos de scripting de Windows. El acceso a los componentes se realiza mediante métodos de interfaz . Esto permite la llamada directa dentro del proceso y el acceso a través del subsistema COM/DCOM entre procesos y equipos.

Sistema de tipos

Clase conjunta

Una coclase , una clase COM, implementa una o más interfaces. Se identifica mediante un identificador de clase, llamado CLSID (que es un GUID) , y mediante un identificador programático legible por humanos , llamado ProgID. Una coclase se crea a través de uno de estos identificadores.

Interfaz

Cada interfaz COM extiende la IUnknowninterfaz, que expone métodos para el conteo de referencias y para acceder a las otras interfaces del objeto , de forma similar a la conversión de tipos , también conocida como conversión de tipos.

Una interfaz se identifica mediante un ID de interfaz (IID), un GUID.

Una interfaz personalizada , derivada de IUnknown, proporciona acceso anticipado mediante un puntero a una tabla de métodos virtuales que contiene una lista de punteros a las funciones que implementan las funciones declaradas en la interfaz, en el orden en que se declaran. Por lo tanto, la sobrecarga de una invocación dentro del proceso es comparable a la de una llamada a un método virtual de C++.

El despacho, también conocido como acceso de enlace tardío , se proporciona mediante la implementación de IDispatch. El despacho permite el acceso desde una gama más amplia de contextos de programación que una interfaz personalizada.

Al igual que muchos lenguajes orientados a objetos, COM proporciona una separación entre la interfaz y la implementación. Esta distinción es especialmente marcada en COM, donde un objeto no tiene una interfaz predeterminada. Un cliente debe solicitar una interfaz para tener acceso a ella. COM admite múltiples implementaciones de la misma interfaz, de modo que los clientes pueden elegir qué implementación utilizar.

Biblioteca de tipos

Una biblioteca de tipos COM define metadatos COM, como coclases e interfaces. Una biblioteca puede definirse como un lenguaje de definición de interfaces (IDL), una sintaxis independiente del lenguaje de programación. IDL es similar a C++, con una sintaxis adicional para definir interfaces y coclases. IDL también admite atributos entre corchetes antes de las declaraciones para definir metadatos como identificadores y relaciones entre parámetros.

Un archivo IDL se compila mediante el compilador MIDL. Para su uso con C/C++, el compilador MIDL genera un archivo de cabecera con structdefiniciones que coinciden con las tablas virtuales (vtbls) de las interfaces declaradas y un archivo C que contiene las declaraciones de los identificadores únicos de interfaz (GUID) . El compilador MIDL también puede generar el código fuente C++ de un módulo proxy. Este proxy contiene funciones auxiliares para convertir las llamadas COM en llamadas a procedimientos remotos, lo que permite la comunicación DCOM fuera del proceso.

MIDL puede generar una biblioteca de tipos binarios (TLB) que otras herramientas pueden utilizar para admitir el acceso desde otros contextos.

Ejemplos

El siguiente código IDL declara una coclase llamada SomeClass que implementa una interfaz llamada ISomeInterface .

coclass SomeClass { [ default ] interface ISomeInterface ; };

Esto es conceptualmente equivalente al siguiente código C++ donde ISomeInterface es una clase virtual pura , también conocida como clase base abstracta.

clase ISomeInterface {}; clase SomeClass : público ISomeInterface { };

En C++, los objetos COM se instancian mediante la función CoCreateInstance del subsistema COM , que recibe el CLSID y el IID. La clase SomeClass se puede crear de la siguiente manera:

ISomeInterface * interface_ptr = NULL ; HRESULT hr = CoCreateInstance ( CLSID_SomeClass , NULL , CLSCTX_ALL , IID_ISomeInterface , ( void ** ) & interface_ptr );

Conteo de referencias

Un objeto COM utiliza el conteo de referencias para gestionar su ciclo de vida. El conteo de referencias de un objeto es controlado por los clientes mediante los métodos IUnknownAddRef`return` y ` Releasereturn`. Los objetos COM son responsables de liberar su propia memoria cuando el conteo de referencias llega a cero. Algunos entornos de programación (por ejemplo, Visual Basic ) proporcionan conteo de referencias automático para simplificar el uso de objetos. En C++, se puede utilizar un puntero inteligente para automatizar la gestión del conteo de referencias.

A continuación se presentan las pautas sobre cuándo se deben llamar a AddRef y Release :

  • Una función que devuelve una referencia a una interfaz (a través del valor de retorno o del parámetro "out") incrementa el contador del objeto devuelto.
  • Se llama a Release antes de que el puntero de interfaz se sobrescriba o quede fuera del ámbito.
  • Si se realiza una copia en un puntero de referencia de interfaz, se llama a AddRef.
  • AddRef y Release se llaman en la interfaz a la que se hace referencia (no en una interfaz diferente del mismo objeto), ya que un objeto puede implementar contadores de referencias por interfaz para asignar recursos internos solo para las interfaces a las que se hace referencia.

Para objetos remotos, no todas las llamadas de conteo de referencias se envían a través de la red. Un proxy mantiene solo una referencia al objeto remoto y conserva su propio conteo de referencias local.

Para simplificar el desarrollo COM para desarrolladores de C++, Microsoft introdujo ATL (Active Template Library) . ATL proporciona un paradigma de desarrollo COM de nivel relativamente alto. También protege a los desarrolladores de aplicaciones cliente COM de la necesidad de mantener directamente el conteo de referencias, al proporcionar tipos de punteros inteligentes . Otras bibliotecas y lenguajes que son compatibles con COM incluyen Microsoft Foundation Classes , VC Compiler COM Support, [ 16 ] VBScript , Visual Basic , ECMAScript ( JavaScript ) y Borland Delphi .

Contexto de programación

COM es un estándar binario independiente del lenguaje que permite utilizar objetos en cualquier contexto de programación capaz de acceder a sus interfaces binarias.

El software cliente COM se encarga de habilitar el subsistema COM, instanciar y contabilizar las referencias de los objetos COM y consultar los objetos para las interfaces compatibles.

El compilador Microsoft Visual C++ admite extensiones del lenguaje C++, denominadas Atributos de C++ , [ 17 ] que están diseñadas para simplificar el desarrollo de COM y minimizar el código repetitivo necesario para implementar servidores COM en C++. [ 18 ]

Tipo de almacenamiento de metadatos

Originalmente, los metadatos de la biblioteca de tipos debían almacenarse en el registro del sistema. Un cliente COM utilizaba la información del registro para la creación de objetos.

El COM sin registro (RegFree) se introdujo con Windows XP para permitir el almacenamiento de metadatos de bibliotecas de tipos como un manifiesto de ensamblado, ya sea como un recurso en el archivo ejecutable o en un archivo separado instalado con el componente. [ 19 ] Esto permite que se instalen varias versiones del mismo componente en el mismo equipo, en diferentes directorios. Y permite la implementación XCOPY . [ 20 ] Esta tecnología tiene soporte limitado para servidores EXE COM [ 21 ] y no se puede utilizar para componentes de todo el sistema como MDAC , MSXML , DirectX o Internet Explorer .

Durante la carga de la aplicación, el cargador de Windows busca el manifiesto. [ 22 ] Si está presente, el cargador agrega información del mismo al contexto de activación. [ 20 ] Cuando la fábrica de clases COM intenta instanciar una clase, primero se comprueba el contexto de activación para ver si se puede encontrar una implementación para el CLSID. Solo si la búsqueda falla, se examina el registro . [ 20 ]

Un objeto COM puede crearse sin información de biblioteca de tipos, y en su lugar solo una ruta al archivo DLL y CLSID. Un cliente puede usar la función DLL COM DllGetClassObjectcon el CLSID e IID_IClassFactory para crear una instancia de un objeto de fábrica . El cliente puede luego usar el objeto de fábrica CreateInstancepara crear una instancia. [ 23 ] Este es el mismo proceso que usa el subsistema COM. [ 24 ] Si un objeto creado de esta manera crea otro objeto, lo hará de la forma habitual (usando el registro o el manifiesto). Pero puede crear objetos internos (que pueden no estar registrados en absoluto) y proporcionar referencias a interfaces para ellos, usando su propio conocimiento privado.

Organización

Un objeto COM puede crearse y utilizarse de forma transparente dentro del mismo proceso (en proceso), entre procesos (fuera de proceso) o de forma remota a través de la red (DCOM). Los objetos fuera de proceso y remotos utilizan la serialización para serializar las llamadas a métodos y los valores de retorno a través de los límites del proceso o la red. Esta serialización es invisible para el cliente, que accede al objeto como si fuera un objeto local dentro del mismo proceso.

Enhebrado

En COM, la gestión de hilos se aborda mediante un concepto conocido como apartamentos . [ 25 ] Un objeto COM individual reside en un único apartamento, que puede ser de un solo hilo o de múltiples hilos. Existen tres tipos de apartamentos en COM: Apartamento de un solo hilo (STA) , Apartamento de múltiples hilos (MTA) y Apartamento neutral para hilos (NA). Cada apartamento representa un mecanismo mediante el cual el estado interno de un objeto puede sincronizarse entre múltiples hilos. Un proceso puede constar de varios objetos COM, algunos de los cuales pueden usar STA y otros MTA. Todos los hilos que acceden a objetos COM residen en un mismo apartamento. La elección del apartamento para los objetos COM y los hilos se determina en tiempo de ejecución y no se puede modificar.

Los hilos y objetos que pertenecen al mismo apartamento siguen las mismas reglas de acceso. Por lo tanto, las llamadas a métodos dentro del mismo apartamento se ejecutan directamente sin la intervención de COM. Las llamadas a métodos entre apartamentos se realizan mediante serialización, lo que requiere el uso de proxies y stubs.

Críticas

Complejidad

COM es relativamente complejo, especialmente en comparación con tecnologías de componentes más modernas como .NET.

Bombeo de mensajes

Cuando se inicializa un STA, se crea una ventana oculta que se utiliza para el enrutamiento de mensajes entre departamentos y entre procesos. Esta ventana debe tener su cola de mensajes "bombeada" regularmente. Esta construcción se conoce como " bombeo de mensajes ". En versiones anteriores de Windows, no hacerlo podía provocar interbloqueos en todo el sistema. Este problema se complica por algunas API de Windows que inicializan COM como parte de su implementación, lo que provoca una "fuga" de detalles de implementación. [ 30 ]

Conteo de referencias

El conteo de referencias dentro de COM puede causar problemas si dos o más objetos se referencian circularmente . El diseño de una aplicación debe tener esto en cuenta para que los objetos no queden huérfanos. Los objetos también pueden quedar con conteos de referencias activos si se utiliza el modelo COM de "sumidero de eventos". Dado que el objeto que dispara el evento necesita una referencia al objeto que reacciona al evento, el conteo de referencias de este último nunca llegará a cero. Los ciclos de referencias generalmente se rompen mediante la terminación fuera de banda o las identidades divididas. En la técnica de terminación fuera de banda, un objeto expone un método que, al ser llamado, lo obliga a liberar sus referencias a otros objetos, rompiendo así el ciclo. En la técnica de identidad dividida, una única implementación expone dos objetos COM separados (también conocidos como identidades). Esto crea una referencia débil entre los objetos COM, evitando un ciclo de referencias. [ 31 ]

El infierno de las DLL

Debido a que los componentes COM en proceso se implementan en archivos DLL y el registro solo permite una única versión por CLSID, en algunos casos podrían verse afectados por el problema de la sobrecarga de DLL . La funcionalidad COM sin registro elimina este problema para los componentes en proceso; esta funcionalidad no está disponible para servidores fuera de proceso.

Véase también

Notas

  1. "Archivo de documentación" . developer.apple.com .
  2. "Complementos y COM de Microsoft" . Apple Inc. Consultado el 5 de octubre de 2010 .
  3. Foro de Microsoft: Compatibilidad binaria entre versiones de Visual C++
  4. "Acerca de Network DDE - Aplicaciones de Windows" . Microsoft.com . 30 de mayo de 2018.
  5. "Técnica de ejecución de código aprovecha el intercambio dinámico de datos" . McAfee.com . 27 de octubre de 2017.
  6. Williams, Tony (29 de diciembre de 1988). "Arquitectura de objetos: Cómo lidiar con lo desconocido, o la seguridad de tipos, en una biblioteca de clases dinámicamente extensible" . Microsoft Research . Archivado del original (DOC) el 16 de agosto de 2000.
  7. Williams, Tony (29 de marzo de 1990). "Sobre la herencia: qué significa y cómo usarla" . Microsoft Research . Archivado del original (DOC) el 16 de agosto de 2000.
  8. Windows avanzado (Guía para desarrolladores de la API Win32 para Windows NT 3.5 y Windows 95)
  9. Brown, Nina; Kindel, Charlie (11 de marzo de 1998). "draft-brown-dcom-v1-spec-03 - Protocolo de modelo de objeto de componente distribuido -- DCOM/1.0" . Ietf Datatracker . Recuperado el 29 de agosto de 2019 .
  10. "El modelo de comunicaciones de Microsoft Windows CE" . techshelps.github.io . Consultado el 28 de febrero de 2026 .
  11. rpetrusha (19 de abril de 2023). "Envoltorio invocable en tiempo de ejecución" . msdn.microsoft.com .
  12. rpetrusha (15 de septiembre de 2021). "COM Callable Wrapper" . msdn.microsoft.com .
  13. Steinberg, Jill (1 de marzo de 1997). "Los componentes en competencia generan panelistas irritables" . JavaWorld . Consultado el 16 de julio de 2020 .
  14. "Índice de documentación de win32com" . docs.activestate.com .
  15. "Python y COM" . www.boddie.org.uk .
  16. "Compatibilidad con COM del compilador" . MSDN . Microsoft. 3 de agosto de 2021.
  17. Microsoft MSDN: Referencia de atributos de C++
  18. Revista MSDN: Atributos de C++: Simplifica la programación COM con la nueva función de Visual Studio .NET.
  19. "Manifiestos de ensamblado" . MSDN . Consultado el 5 de noviembre de 2009 .
  20. 1 2 3 Dave Templin. "Simplifique la implementación de aplicaciones con ClickOnce y COM sin registro" . Revista MSDN . Consultado el 22 de abril de 2008 .
  21. "Cómo usar un servidor COM fuera de proceso sin su archivo tlb" . Consultado el 16 de abril de 2011 .
  22. "Conceptos de aplicaciones aisladas y ensamblajes en paralelo" . MSDN . Consultado el 5 de febrero de 2016 .
  23. Arkhipov, Mikhail (1 de abril de 2005). "COM sin registro" . Blogs de MSDN . Consultado el 29 de abril de 2016 .
  24. "Punto de entrada DllGetClassObject (COM)" . MSDN . Si una llamada a la función CoGetClassObject encuentra el objeto de clase que se va a cargar en una DLL, CoGetClassObject utiliza la función DllGetClassObject exportada de la DLL.
  25. Microsoft MSDN: Procesos, subprocesos y apartamentos
  26. Microsoft MSDN: Apartamentos de un solo hilo
  27. Microsoft MSDN: Apartamentos multihilo
  28. Microsoft MSDN: Comprensión y uso de los modelos de subprocesos COM
  29. Codeguru: Entendiendo los apartamentos COM. Archivado el 24 de mayo de 2021 en Wayback Machine .
  30. Brumme, Chris. "Apartamentos y bombeo en el CLR" . Blog de Chris Brumme . Consultado el 26 de junio de 2025 .
  31. Wolfe, Mike (31 de marzo de 2022). "El fallo fatal del conteo de referencias: referencias circulares" . No Longer Set . Recuperado el 26 de junio de 2025 .

Referencias

  • "COM: Una breve introducción (PowerPoint)" (Enlace directo al archivo PowerPoint (PPT)) . Consultado el 7 de marzo de 2006 .
  • Box, Don (1998). Essential COM . Addison-Wesley. ISBN 978-0-201-63446-4.
  • Chappell, David (1996). Comprensión de ActiveX y OLE . Microsoft Press. ISBN 978-1-57231-216-6.
  • "Integración y migración de servicios COM+ a WCF" . Consultado el 15 de abril de 2010 .
  • Modelo de objetos componentes en MSDN
  • Entrevista con Tony Williams, coinventor de COM (Transmisión en vídeo por internet, agosto de 2006)
  • Información: Diferencias entre controles OLE y controles ActiveX de Microsoft
  • Especificación del formato de datos TypeLib (no oficial) con utilidad de volcado de código abierto.
  • Glosario COM / DCOM (archive.org)