Cum sunt scripturi aplicațiile

În general, ideea a primit numele ActiveScripting și sa transformat într-o tehnologie separată, bazată pe mai multe mecanisme COM.

Scriptură activă în carne







  • IActiveScript
    Această interfață este solicitată mai întâi de la modulul script-limbaj și este utilizată pentru inițializare. Vom analiza metodele SetScriptSite, AddNamedItem, SetScriptState și GetScriptDispatch când implementăm o gazdă de script.
  • IActiveScriptParse
    Implementarea acestei interfețe este responsabilă pentru procesarea textului scriptului în sine prin metoda ParseScriptText.

Active Scripting Engine este creat ca un obiect obișnuit COM:

Pentru ca acest lucru să funcționeze într-un fel, trebuie să implementăm interfața IActiveScriptSite prin care modulul de script poate interacționa cu aplicația noastră.

Cum este implementată gazda

Deci, trebuie să implementați IActiveScriptSite și să spuneți modulului script că are ceva de lucrat.

Puteți implementa schema MFC cu BEGIN_INTERFACE_MAP / INTERFACE_PART sau cu schema obișnuită, pictura AddRef, Release și QueryInterface. Deoarece obiectul trebuie să exporte doar o singură interfață, IActiveScriptSite, toate inscripțiile COM pot fi ușor scrise fără MFC. Codul detaliat pentru aceasta este inclus în exemplul respectiv.

După ce modulul script a fost inițializat, trebuie să treacă un pointer la ActiveScriptSite.

Acum, modulul de script are cum să comunice cu aplicația noastră, dar nu există nimic de rulare. Este timpul să transferați un script și să îl trimiteți prin interfața IScriptParse procesării și lansării.

Asta nu e tot, viața devine puțin mai complicată :). Acum trebuie să executați cea mai complicată procedură Test. Apropo, dacă emiteți codul în afara procedurii, nu mai sunt necesare pași suplimentari - scenariul va porni automat tot ceea ce nu se află în nicio procedură. În limbajul C, tot ceea ce nu ați descompus prin proceduri și funcții intră în void principal ().

Primul parametru, după cum puteți vedea, este gol. Aici puteți specifica numele obiectului în spațiul interior al scriptului. Un parametru gol reprezintă spațiul tuturor funcțiilor.

După primirea expedierii, trebuie să efectuați un apel utilizând metoda Invoke. în timp ce trec parametrii necesari funcției. În cazul nostru, acesta este un șir pentru funcția Test.

Chiar și cu toate acestea, deși funcția noastră a început și a dat o fereastră, nimeni nu are nevoie de acest scenariu. La urma urmei, toată această vrăjitorie a fost aranjată să lucreze cu obiectele interne ale programului.

Interfața IActiveScript are o metodă AddNamedItem care vă permite să adăugați identificatori diferiți în spațiul de nume al scriptului.

Așa că am adăugat ID-ul că până în prezent nici o informație nu are. Dar dacă ceva în VB script-uri, vă rugăm să consultați acest identificator, motorul va apela în mod automat metoda gazdă IActiveScriptSite. GetItemInfo, care ar fi fost deja puse în aplicare de către noi.







Obiectul m_pScriptObject este un pointer către CCmdTarget moștenitorul nostru, care este creat utilizând tehnologia MFC Automation.

Acum, în script puteți să vă referiți în mod absolut la proprietățile și metodele de automatizare ale MyObject. Și în cazul unei erori de rulare, se va apela metoda IActiveScriptSite :: OnScriptError.

Deci, cei care au reușit să realizeze metoda VBScript-automatizare „natural“, felicit și pe cei care nu înțeleg grăbesc să consola: Microsoft a lansat o componentă ActiveX numit ScriptControl, care simplifică toate funcțiile de mai sus, și le organizează într-o formă mai acceptabilă. Nu fără a compromite viteza, desigur. ).

Componenta script poate fi adăugată cu o metodă VB complet standard: din caseta de dialog Componente. Dacă nu există un astfel de element în listă, atunci este suficient să îl găsiți pe disc utilizând Browse.

Plasând componenta de script pe o anumită formă a programului (din acest loc îl vom numi ScriptControl1), veți descoperi că componenta în sine nu are multe proprietăți: AllowUI, Language and Timeout.

Proprietatea AllowUI vă permite să determinați dacă scriptul poate afișa casetele de dialog, cum ar fi mesaje de eroare, diverse MsgBox și InputBox.

Proprietatea Limbă este setată implicit în VBScript, dar poate conține și numele JScript cu succes egal.

Proprietatea TimeOut specifică intervalul maxim după care scriptul va fi reziliat forțat. Acest lucru este util în cazul în care scenariul "întâmplător" se blochează.

Acum puteți accesa interiorul componentei, descoperind câteva funcții care vă permit să începeți ceva, fără pregătirea dureroasă: Eval și ExecuteStatment. Așa cum ați putea ghici, prima calculează o expresie introdusă ca șir, iar cea de-a doua execută o instrucțiune completă.

Orice expresie poate fi evaluată: în întregi, șir, funcții logice, retur. Rezultatul este returnat ca o variabilă VARIANT, care, după cum știți, poate conține totul.

Este puțin probabil că dacă ați reușit să controlați Script Control, puteți fi mulțumit de singura linie procesată. Metoda AddCode vă permite să adăugați câteva linii, care pot fi apoi executate utilizând metoda Run. Dacă funcția acceptă parametri, acești parametri pot fi trecuți prin Run.

Codul care este trecut ca parametru pentru metoda AddCode trebuie să fie corect și să conțină una sau mai multe proceduri sau funcții. În cazul în care codul adăugat cu AddCode este incorect, componenta aruncă o excepție. Sarcina dezvoltatorului este de a intercepta această eroare și de a da utilizatorului să înțeleagă că sarcina utilizatorului este de a scrie scripturi mai competent.

În general, Script Control are o proprietate Error și un eveniment de eroare cu același nume, numit în caz de eroare. În cazul erorilor în timpul executării, este mai bine să utilizați această proprietate deoarece conține mai multe informații despre eroare decât versiunea standard cu Err.

În ceea ce privește obiectele interne ale programului, exportarea acestora în spațiul de nume script este mult mai ușoară decât în ​​Visual C ++. Metoda AddObject vă permite să extindeți numărul de obiecte disponibile pentru script. Pentru a face acest lucru, creați un modul de clasă și declarați funcțiile necesare și proprietățile publice în interiorul acestuia.

Acum, în interiorul scriptului, puteți să vă referiți în mod absolut la obiectul declarat1.

Astfel, este posibil să organizați un anumit obiect proxy pentru a accesa comenzile din programul dvs. De exemplu, puteți crea o funcție în YourClassModule care adaugă o linie în listă, în bara de instrumente sau în meniu.

Ar trebui să se țină seama de faptul că, dacă trebuie să transferați orice variabilă de script intern la prelucrarea în ClassModule, atunci va trebui să lucrați doar cu variabile de tip Variant.

Posibilitățile devin cu adevărat nelimitate, dacă emiteți componente interne prin proprietățile YourClassModule. De exemplu, formularul.







Articole similare

Trimiteți-le prietenilor: