Crearea unui DLL cu resurse web
Arhivele atașate conțin toate instrumentele descrise în el și un exemplu de DataBank.dll terminat.
Arhiva Initial.zip conține fișierul intermediar de date DataBank.obj al viitoarei biblioteci, fișierul script de resurse DataBank.rc și fișierul de resurse binare DataBank.res compilate din acesta. În plus, această arhivă include fișierele care sunt plasate direct ca resurse în bibliotecă: Header.gif. Return.gif. Back.jpg. Index.htm. Mainpage.htm. Page.htm și Top.htm.
Arhiva Tools.zip conține toate instrumentele necesare pentru a compila și a lega DLL-ul. Acesta include compilatorul de resurse BRCC32.EXE. linker ILINK32.EXE. Fișierele UUID.LIB necesare pentru funcționarea corectă a acestora. LNKDFM60.DLL. RLINK32.DLL. RW32CORE.DLL. precum și un fișier batch BuildAll.bat. Acesta conține linii de comandă pentru lucrul cu compilatorul de resurse și linker. Acest set de instrumente trebuie neapărat să fie inclus în livrarea de Borland C ++ Builder și Borland Delphi a oricăror versiuni, dar, eventual, cu alte nume decât numele atașate în fișierele de arhivă.
Arhiva DllSymChanger.zip conține programul DllSymChanger.exe pe care l-am creat. facilitează procesul de schimbare a caracterelor necesare pentru funcționarea DLL-ului.
Conținutul arhivelor este autonom față de prezența sau absența versiunilor instalate de BCB și Delphi pe computerul utilizatorului, funcționarea acestuia fiind verificată pe mașină cu Windows 98 SE absolut "proaspăt".
Amintirea programării clasice (non-RAD) cu crearea inerentă "manuală" a fișierului script de resurse, ajungem la concluzia că acesta este exact ceea ce avem nevoie. Cu alte cuvinte, suntem interesați de posibilitatea creării unor DLL-uri, care, în cele din urmă, includ resursele cu paginile HTM necesare.
În pasul următor, trebuie să obținem fișierul de resurse compilate, care va fi inclus în DLL-ul nostru. Pentru a face acest lucru, aveți nevoie de resursele în sine (paginile HTM) și de fișierul de resurse script (în cazul nostru este numit DataBank.rc).
În arhiva atașată Initial.zip, sub forma unui exemplu, este luată în considerare crearea unui DLL cu pagini Web conectate intern. Fișierele care reprezintă aceste pagini au următoarele nume: Index.htm. Mainpage.htm. Page.htm. Top.htm. Header.gif. Return.gif. Back.jpg. Apoi, există trei cerințe necesare pentru buna funcționare a IE în DLL-ul creat:- Toate fișierele implicate în operarea paginilor Web trebuie să fie în același director;
- Toate link-urile din paginile Web ar trebui să fie relative;
- Numele niciunui fișier utilizat în paginile Web nu poate conține subliniere. Numele de fișiere trebuie să conțină un set de caractere A Ђ | Z și 0 | | 9. Numele fișierelor nu pot începe cu numere.
Nerespectarea celei de-a treia cerințe în utilizarea sublinierii nu este critică și va fi discutată mai jos. Celelalte părți ale celei de-a treia cerințe trebuie respectate. Acest lucru se datorează faptului că numele resurselor la compilarea unui fișier RES trebuie să respecte regulile de specificare a identificatorilor de limbaj C, a căror încălcare duce la erori în timpul compilării fișierului script de resurse într-un fișier de resurse binare.
Se așteaptă nume de resursă sau nume de tip de resursă
Pentru a rezolva această problemă, în loc de punctul care separă "numele" resursei și "extensia" ei, folosim simbolul de subliniere - singurul caracter care nu este un număr sau o literă latină și permis cu ocazia creării numelui de resursă. Așa cum ați putea ghici, fișierul DLL rezultat va conține resurse cu nume separate printr-un subliniere, care, pentru performanța DLL-ului, va trebui înlocuită cu un punct. Dar despre asta mai târziu.
Al doilea element al liniei de descriere a resurselor este numele tipului de resursă. Dacă folosim un tip RCDATA arbitrar predefinit pentru a atribui resursele noastre. compilarea și asamblarea DLL va trece, resursele vor fi corect cauzate din bibliotecă de orice programe aplicate ca resurse, dar IE refuză să le proceseze așa cum avem nevoie. Exact același lucru se întâmplă dacă atribuim un alt tip resurselor paginii. Adică, eu există unele speranța că IE va examina tipurile de resurse grupate ca un fel de subdirector care ar fi o idee destul de bună pentru a organiza ierarhia relațiilor între grupuri logice de pagini, dar dezvoltatorii IE par să aibă o opinie diferită în această privință. Astfel, dacă vom atribui numele tipului de resurse, de exemplu, PAGEAREA sau oricare alta, inclusiv RCDATA, după biblioteca de post-procesare IE încă refuză să accepte pagini web sub formă de pagini web. Soluția în această situație de blocare solicită studiul structurii bibliotecii de sistem shdoclc.dll. Toate paginile aflate în resursele sale aparțin două tipuri, ale căror nume nu sunt șir, ci identificatori întregi. Pentru a specifica tipurile de resurse întregi, în linia fișierului script de resurse, trebuie să cuplați valorile identificatorului întreg în paranteze. În caz contrar, compilatorul de resurse îi va trata ca identificatori de șir.
Al treilea element al șirului de descriere a resurselor este numele fișierului de pagină. Poate fi specificată pur și simplu subcadrată sau închisă în ghilimele duble. Inutil să spun că toate fișierele DLL utilizate în acest mod ar trebui să fie în același director ca discul. Acest lucru se aplică tuturor fișierelor de serviciu ale proiectului, precum și tuturor fișierelor plasate în resurse.
În forma finală, linia care descrie atașamentul paginii index.htm la resursele viitoarei biblioteci arată astfel:
index_htm (23) index.htm
După crearea fișierului script de resurse, este necesar să îl compilați. Pentru aceasta, folosim compilatorul de resurse al liniei de comandă BRCC32.EXE. care face parte din BCB6. Privind numele fișierului compilator, vedem că rezultatul muncii sale va fi un fișier de resurse binare pe 32 de biți (cel puțin, dacă nu utilizați opțiuni suplimentare de linie de comandă). Teoretic, puteți utiliza o varietate de compilatoare 16-biți (RC.EXE. BRCC.EXE etc.) și vom obține rezultatul dorit, dar vom continua să folosească linkerul pe 32 de biți, este recomandat să utilizați un 32-bit resurse compilator . Compilatorul de resurse se execută din linia de comandă, care include numele fișierului compilator de resurse în sine și numele fișierului de script de resurse:
Următorul pas în crearea unui DLL este construirea bibliotecii din fișierul obiect DataBank.obj și din fișierul de resurse binare DataBank.res. În acest scop, vom folosi legătura ILINK32.EXE. care la rândul său numește bibliotecile RLINK32.DLL și LNKDFM60.DLL și utilizează fișierul UUID.LIB. Linia de comandă pentru a apela linker-ul cu parametrii este după cum urmează:
ilink32 DataBank.obj, DataBank.dll. DataBank.res
Avertisment: imaginea este conectată ca executabil, dar are extensia .DLL sau .BPL
Acest lucru se datorează lipsei unui fișier DEF, dar, totuși, biblioteca nu influențează corectitudinea conținutului. În timpul procesului de asamblare, fișierele cu numele modulului rezultat și extensiile TDS, MAP, ILC, ILD, ILF, ILS care pot fi șterse fără durere vor fi create de linker.
A fost creată o bibliotecă cu resurse pentru elemente Web.
Dacă am folosit agentul de legătură 16-biți (de exemplu, LINK.EXE), apoi, ca rezultat vom obține 16 biți DLL corect, dar IE a refuzat să lucreze cu ea, care emite un mesaj adecvat.
Să presupunem că DataBank.dll are următoarea cale:
Dacă rulați IE și introduceți adresa URL în URL
Internet Explorer va găsi resursa INDEX_HTM localizată în DataBank.dll. dar nu poate determina în mod corect acțiunile așteptate din acesta, deoarece numele identificatorului de resurse este perceput de IE ca fiind numele fișierului fără o extensie.
Acum este momentul să începeți IE și să introduceți linia URL
Sarcina principală este complet îndeplinită.
Este de remarcat faptul că, atunci când faceți legături într-o bibliotecă, IE acționează ca și cum ați realiza legături în directorul discului.
Această metodă pe care am propus-o deschide oportunități mari pentru programatori în utilizarea componentei TCppWebBrowser (TWebBrowser), împreună cu o securitate suficientă a datelor de serviciu ale produsului software.