Sergey Shibayev - utilizarea fișierului de resurse (

Când construi proiectul în definiția de resurse pentru Windows (.rc) fișierele sunt compilate într-o formă binară (.RES) și la link-ul se conectează la exe-fișier de fapt, se prescrie după începerea undeva în memorie. Să-ți că identifica locația resursei amintesc permite funcția:

Tehnologia este stabilită, nu se pune în discuție. Deja în acest stadiu în Linux, există mai multe probleme. În primul rând, ce compila fișierul sursă de resurse în format binar? În al doilea rând, cum să-l conecteze la acest format de fișier executabil al proiectului? Și, în al treilea rând, cum să găsească și să citească în fișierul de resurse corespunzătoare?

Pasul 1. Compilați fișierul de resurse

Cel mai simplu pas. Cu această sarcină face față perfect wrc utilitar (Vin Resource Compiler), care este capabil de a compila fișierul de resurse în format binar 16- sau 32-biți. Cererea este simplu:

Pasul 2: Conectați fișierul de resurse

Să presupunem că la intrare avem un fișier binar (binar -I), de ieșire vrem să obține fișierul într-un format de fișier obiect pe platforma x86 pe 32 de biți (-O elf32-i386), și ar trebui să arate ca fișier „executabil“ (-B i386). Ca atare, este deja posibil să se conecteze la proiect:

Eu folosesc cmake, astfel încât în ​​CMakeLists.txt meu adăugat câteva rânduri:

Pe aproape toate capetele magice. Rămâne neclar doar o singură întrebare: cum de a găsi resurse în fișierul executabil finală? Compozitor, care desfășoară activitatea lor, a lăsat cu generozitate în fișierul adunat mai multe etichete:

Pentru aceste etichete se pot citi acum conținutul unui fișier de resurse.

Pasul 3: Găsirea și resurse de citire de program

Pentru a începe cu definim variabilele corespunzătoare formatului etichetei-a descris mai sus:

La determinarea utilizării tip char, pentru că în resursa mea de proiect conține doar link-uri fișiere text în format XML. definite în continuare tipurile obișnuite care nu sunt cunoscute în Linux, numai pentru comoditatea de lucru

Totul este pregătit să caute o resursă dorită, cu excepția faptului că nu există nici o funcție corespunzătoare de pe Linux, va trebui să le facă. Din moment ce toate resursele care au fost conectate la proiectul nostru sunt stocate în formatul de fișier res, ar fi frumos să înceapă să învețe formatul. Am citit în MSDN, că formatul este bazat pe structura RESOURCEHEADER

Sub Linux, am redefinit, de asemenea, tipurile de

și a adăugat o constantă care indică tipul de resursă: în cazul meu, este un simplu de date

Deci, în fișierul de resurse după structura RESOURCEHEADER urmată de date, dimensiunea care este octeți DataSize. Această informație este aproape suficientă pentru a-l gut complet. Ultima ambuscadă care-l așteaptă pe drumul spre gol: toate resursele, inclusiv structura și datele în sine, este aliniat cu un cuvânt dublu. Aceasta este, în cazul în care dimensiunea în octeți nu este un multiplu de patru, într-o coadă adăugat la acesta numărul lipsă de caractere nule. Am fost o astfel de caracteristică pentru căutare RC_DATA tip de resursă pentru un anumit nume

Și acolo este nimic de oprire pentru a citi conținutul memoriei în variabila sa

Resource ::

Desigur, exemplul de mai sus, folosind Linux, în definiția obișnuită pentru fișierele de resurse pentru Windows, mai degrabă primitive ca fiind „blocat“ sub un singur tip de date (RT_RCDATA). Cu toate acestea, este baza piramidei pentru copii deja îmbrăcat puțin peste care ei bucla puteți schița atât de mult mai mult.

articole similare