En la programación de aplicaciones de Microsoft Windows , OLE Automation (posteriormente rebautizado simplemente como Automatización [1] [2] ) es un mecanismo de comunicación entre procesos creado por Microsoft . Se basa en un subconjunto del Modelo de objetos componentes (COM) que estaba destinado a ser utilizado por lenguajes de secuencias de comandos (originalmente Visual Basic), pero que ahora lo utilizan varios lenguajes en Windows. Todos los objetos de automatización son necesarios para implementar la interfaz IDispatch . Proporciona una infraestructura mediante la cual las aplicaciones llamadas controladores de automatización pueden acceder y manipular (es decir, establecer propiedades o llamar a métodos) objetos de automatización compartidos que son exportados por otras aplicaciones. Reemplaza al intercambio dinámico de datos (DDE), un mecanismo más antiguo para que las aplicaciones se controlen entre sí. [3] Al igual que con DDE, en OLE Automation el controlador de automatización es el "cliente" y la aplicación que exporta los objetos de automatización es el "servidor".
Al contrario de su nombre, los objetos de automatización no necesariamente usan Microsoft OLE , aunque algunos objetos de automatización se pueden usar en entornos OLE. La confusión tiene sus raíces en la definición anterior de OLE de Microsoft, que anteriormente era más o menos sinónimo de COM.
Para garantizar la interoperabilidad, las interfaces de automatización están limitadas a utilizar un subconjunto de todos los tipos COM. [4] [5] Específicamente, las interfaces de automatización deben usar SAFEARRAY en lugar de matrices COM sin formato.
Sin embargo, los servidores COM compatibles con la automatización pueden confiar en la implementación de clasificación OLE incorporada. [6] Esto evita la necesidad de proyectos proxy/stub adicionales para ordenar fuera de proceso.
La automatización se diseñó teniendo en cuenta la facilidad de las secuencias de comandos, por lo que los controladores a menudo proporcionan lenguajes como Visual Basic para aplicaciones a los usuarios finales, lo que les permite controlar los objetos de automatización mediante secuencias de comandos. Los objetos de automatización a menudo se escriben en lenguajes convencionales como C++ , [7] donde los atributos de C++ se pueden usar para simplificar el desarrollo. [8] Los lenguajes como Visual Basic y Borland Delphi también proporcionan una sintaxis conveniente para la automatización que oculta la complejidad de los elementos subyacentes. implementación.
Para automatizar una aplicación, el desarrollador de un controlador de automatización debe conocer el modelo de objetos que emplea la aplicación de destino que exporta los objetos de activación. [9] Esto requiere que el desarrollador de la aplicación de destino documente públicamente su modelo de objetos. El desarrollo de controladores de automatización sin conocimiento del modelo de objetos de la aplicación de destino es "de difícil a imposible". [10]
Debido a estas complicaciones, los componentes de automatización generalmente cuentan con bibliotecas de tipos , que contienen metadatos sobre clases, interfaces y otras características expuestas por una biblioteca de objetos. Las interfaces se describen en Lenguaje de definición de interfaces de Microsoft . Las bibliotecas de tipos se pueden ver utilizando varias herramientas, como el Visor de objetos OLE/COM de Microsoft ( oleview.exe
, parte del SDK de la plataforma Microsoft ) o el Explorador de objetos en Visual Basic (hasta la versión 6) y Visual Studio .NET . Las bibliotecas de tipos se utilizan para generar patrones de proxy / código auxiliar para interoperar entre COM y otras plataformas, como Microsoft .NET y Java . Por ejemplo, el SDK de .NET Framework incluye herramientas que pueden generar una DLL .NET proxy para acceder a objetos de automatización mediante el enlace temprano (con información sobre las interfaces extraídas de una biblioteca de tipos) y el enlace tardío (a través de IDispatch, asignado a .NET Reflection). API), con el puente integrado de .NET a COM llamado COM Interop . [11] Si bien Java carece de soporte COM integrado, conjuntos de herramientas como JACOB [12] y jSegue [13] pueden generar código fuente proxy (que consta de dos partes, un conjunto de clases Java y una fuente C++ para una DLL de interfaz nativa de Java ). de bibliotecas de tipos. Estas soluciones sólo funcionan en Windows. Otra biblioteca j-Interop [14] basada en Java que permite la interoperabilidad con componentes COM sin JNI , utilizando el protocolo de conexión DCOM (MSRPC) y también funciona en plataformas que no son Windows.
Microsoft ha documentado públicamente el modelo de objetos de todas las aplicaciones de Microsoft Office , [15] y algunos otros desarrolladores de software también han documentado los modelos de objetos de sus aplicaciones. Los modelos de objetos se presentan a los controladores de automatización como bibliotecas de tipos, con sus interfaces descritas en ODL .
La automatización está disponible para una variedad de idiomas, incluidos, entre otros: