1. Automatizarea OLE
Automatizarea OLE este capacitatea de a gestiona OLE al unei alte aplicații programat.
Aplicațiile pot oferi acces la serviciile lor prin intermediul interfețelor COM. După aceea, orice fragment de cod care poate apela metode obiect COM poate utiliza astfel de servicii. În COM, un astfel de mod standard de furnizare a programabilității se numește Automatizare. Adesea, instrumentele simple de limbaj, cum ar fi Visual Basic, sunt folosite pentru a crea programe care rulează alte aplicații. Programele pe care le creează sunt de asemenea numite scripturi.
Astfel, scopul programului de programare este să permită serverului de aplicație să ofere accesul la serviciile sale din programele din afara, astfel încât scriptul să poată face tot ceea ce face un utilizator obișnuit. Pentru a face acest lucru, puteți utiliza interfețele COM. Cu toate acestea, problema este că interfețele pe care le-am discutat mai devreme nu corespund în mod corespunzător capabilităților mediilor precum Visual Basic. Sa dovedit că Visual Basic, fiind un limbaj relativ simplu, nu este adecvat pentru utilizarea programabilității. Există probleme atunci când lucrați cu pointeri și marshaling.
Pentru a rezolva această problemă, grupul Visual Basic a dezvoltat o interfață COM standard - IDispatch.
2. Interfețe DISPATCH
Un obiect a cărui clasă implementează interfața IDispatch declarată în modulul System Delphi este un obiect Automation. Interfața IDispatch definește metodele și proprietățile implementate de obiectul Automation prin interfața IDispatch.
Ca orice interfață normală, este implementată folosind un tabel virtual al indicilor de metodă. Interfața VMT IDispatch începe cu cele trei metode bine cunoscute de IUnknown, urmat metode GetlDsOfNames, GetTypelnfo, GetTypelnfoCount și invocați.
• Invocați (metoda runtime) - folosiți pentru a apela alte metode. Pentru a face acest lucru, dezvoltatorul obiectului de implementare IDispatch trebuie să stabilească ce metode vor fi disponibile. Acest lucru este realizat prin definirea unei interfețe suplimentare de expediere, numită adesea o dispinterface. Pentru ao implementa, VMT nu este utilizat. Pentru fiecare metodă Dispinterface i se atribuie un număr întreg - Identificator de expediere (DispID), care este utilizat pentru efectuarea apelului. De fapt, o implementare a unui obiect Invoke metoda este o declarație de caz mare.
• GetIDsOfNames - vă permite să specificați numele textului metodei de interes ca parametru. Dacă IDispatch găsește o metodă pe server cu numele specificat, returnează DispID, care este apoi utilizat de metoda Invoke. În realitate, convertește numele metodei la DispID.
• GetTypelnfo - returnează interfața interfeței ITypelnfo a informațiilor de tip obiect dacă obiectul are o bibliotecă de tip. Prin urmare, puteți afla totul despre metodele de apelare și parametrii de ambalare.
• GetTypelnfoCount - returnează date despre dacă apelul la GetTypelnfo va returna informații utile, adică dacă obiectul are o bibliotecă de tip (1 \ 0 -Yes \ No).
3. Metode de creare a obiectelor de automatizare
Delphi vă permite să creați obiecte de automatizare ca parte a serverelor de automatizare externe și interne.
a) Pentru a crea un server extern de automatizare, ar trebui:
• Creați o nouă aplicație care va reda rolul serverului executând următoarele comenzi:
Fișier \ Aplicație nouă
După crearea, salvați unitatea de fișiere ca Unitl.pas și fișierul proiectului ca OLEXE.DPR
• Pentru a crea un obiect de automatizare, executați comenzile.
Fișier \ Nou
Obiect de automatizare. Va fi lansat Expertul pentru crearea obiectelor.
Inițial, în fereastra Expert Object Automation, trebuie să specificați Numele de Clasă (Sumă), Instancing (Instanța Multiplă), Modelul Threading (Single).
Obiectul OLE este definit ca CoClass, care de obicei include două metode (funcții de clasă): una pentru crearea unui obiect local, altul - îndepărtat:
CoSum = Clasa
Clasă Funcție Creare (): ISum;
Funcția de clasă CreateRemote (Const MachineName: String): ISum; End;
După închiderea bibliotecii de tip și salvarea fișierului unitar creat ca Sum.pas, trebuie să implementați metodele interfeței declarate în acest fișier, de exemplu, după cum urmează:
b) Pentru a crea un server de automatizare internă, trebuie:
• Biblioteca ActiveX.
• Pentru a crea un obiect de automatizare, executați următoarele comenzi: File \ New Automation Object
Fișier \ Nou
c) Metodele și proprietățile expuse, în principiu un server de automatizare poate conține orice proprietăți și metode. Cu toate acestea, există o specificație Microsoft pentru serverele de automatizare, care ar trebui să fie utilizate la crearea acestora. Proprietățile care trebuie specificate includ: FullName, Help, Left, Top și o serie de altele.
În registru, prin GUID
În secțiunea LocalServer32, calea către OLEXE.EXE va fi specificată.
Secțiunea ProglD specifică: "OLEXE.Sum"
Secțiunea TypeLib indică: "
Secțiunea Versiune indică: "1.0"