Automatizare Microsoft OLE

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 26 septembrie 2016; verificările necesită 6 modificări .

OLE Automation este o  tehnologie Microsoft care vă permite să accesați obiecte COM din interpreții de limbaj de scripting, cum ar fi VBScript (în acest moment, suportul pentru accesarea obiectelor OA este disponibil în versiunile Windows ale tuturor limbaje de scripting populare).

Istorie

A apărut pentru prima dată în jurul anului 1993 ca înlocuitor pentru caracteristica depreciată DDE_EXECUTE.

Mediul de programare Visual Basic s-a bazat aproape în întregime pe OLE Automation, cu tipuri de date precum String și Variant.

Importanță practică

Obiectele OLE Automation sunt toate controale ActiveX (controale OCX). Proprietățile, metodele și evenimentele acestor componente sunt implementate folosind automatizarea OLE.

De asemenea, obiectele OLE Automation sunt multe aplicații populare, cum ar fi componentele Microsoft Office . Acest lucru face posibilă lansarea și gestionarea acestei aplicații (de exemplu, în Excel , creați programatic un tabel, completați celulele din acesta și salvați-l într-un fișier) dintr-un script scris într-un limbaj de scripting.

De asemenea, obiectele OLE Automation sunt toate etichetele HTML dinamice (când se utilizează Microsoft Trident sau Apple WebKit [de verificat] sau Google Chrome [de verificat] ).

De asemenea, pe această tehnologie se bazează WMI (nivelul său responsabil pentru comunicarea cu programele client) și o serie de utilități administrative Windows, de exemplu, gestionarea serverului web IIS .

Caracteristici

Tehnologia definește acele interfețe COM prin care interpretul de limbă va comunica cu obiectul.

Tehnologia suportă:

Tipuri de date OLE Automation (pot fi utilizate în proprietăți, metode și evenimente):

Alte tipuri de date (structuri, pointeri de obiecte non-COM, alte reprezentări ale matricelor și șirurilor de caractere) nu sunt acceptate de tehnologie.

Tehnologia acceptă și biblioteci de tipuri - informații despre tipurile de proprietăți/metode/argumente disponibile la runtime (ceva de genul Reflection în .NET).

De obicei, tehnologia rezolvă numele proprietăților și metodelor în timpul execuției fără a le verifica deloc în timpul parsării și generează doar o eroare „obiectul nu acceptă proprietatea sau metoda” în timpul execuției (legare târzie). Totuși, dacă obiectul are o bibliotecă de tipuri înregistrată pe mașină, atunci în unele medii de dezvoltare este posibil să-l declare în așa fel încât numele să fie verificate în etapa de analiză. În Visual Basic, acest lucru a fost realizat cu Dim o As Object (numai legarea tardivă) sau Dim o As Excel.Application (legarea timpurie, dar necesită ca Excel să fie instalat pe mașina de construcție și Excel să fie adăugat la lista de componente utilizate în proiectul).

La nivelul limbajelor C/C++, un apel OLE Automation arată ca un apel către IDispatch::Invoke, unde numele șirurilor metodei/proprietății/argumentelor sunt convertite în constante și valorile argumentelor convertite în tipuri OLE Automation sunt trecute. Acest lucru este extrem de incomod și provoacă costuri de performanță, atât de multe obiecte au implementat așa-numitul. interfețele duale sunt descendenți ai IDispatch care implementează atât Invoke (folosit de scripturi și în cazul unei declarații As Object), exact aceeași funcționalitate prin metode COM obișnuite (folosite de C++ și acei interpreți care înțeleg interfețele duale, precum Visual Basic). ). Aceasta păstrează restricția privind tipurile de date de mai sus. Biblioteca ATL conține un cadru de suport de interfață duală.

Compilatorul Microsoft C++ acceptă directiva #import - includerea unei biblioteci de tipuri (.tlb sau fișierul executabil în care este încorporat). În același timp, anteturile C++ sunt generate automat din fișierul sursă folosind instrumentele comdef.h (smart-pointere pentru obiecte COM etc.).

Ciclul de dezvoltare a obiectelor:

Ciclul de construcție a obiectului: