Deconectezi și conservarea resurselor în exe sau dll - de lucru cu sistemul - articole Delphi -

Deconectezi și conservarea resurselor într-un DLL sau EXE

Uneori trebuie să coase resursele în fișierul executabil al aplicației (de exemplu, pentru a preveni ștergerea accidentală de către utilizator, sau pentru a le proteja de modificări). Acest exemplu arată cum să coase orice fișier ca o resursă în EXE-Schnick.

Apoi, ia în considerare modul de a crea un fișier de resurse care conține koriyu orice fișier. După ce creați acest fișier, puteți atașa cu ușurință la directiva proiectului. fișier de resurse, pe care o vom crea în următorul format:

  • antet

  • rubrica pentru RCDATA nostru de resurse
  • date reale - resursă RCDATA

Acest exemplu vă va arăta cum să salvați fișierul de resurse, doar un singur fișier, dar cred că la fel de ușor puteți salva câteva fișiere.

Titlul resursei este după cum urmează:
TResHeader = înregistrare
DataSize: DWORD; // dimensiunea datelor
HeaderSize: DWORD; // dimensiunea acestei înregistrări
ResType: DWORD; // cuvântul scăzut = $ FFFF => ordinal
Resid: DWORD; // cuvântul scăzut = $ FFFF => ordinal
DataVersion: DWORD; // *
MemoryFlags: WORD;
LanguageID: WORD; // *
Versiune: DWORD; // *
Caracteristici: DWORD; // *
se încheie;

Câmpurile marcate cu asterisc nu vom folosi.

Codul de mai sus creează un fișier de resurse și îl copiază în fișierul:
Procedura CreateResourceFile (
Datafile, ResFile: string; // nume de fișiere
Resid: Integer // id Resurse
);
var
FS, RS: TFileStream;
FileHeader, ResHeader: TResHeader;
Padding: array [0..SizeOf (DWORD) -1] de octet;
începe


FS: = TFileStream.Create (// citește datele dintr-un fișier
Datafile, fmOpenRead);
RS: = TFileStream.Create (// scrie fișierul de resurse
ResFile, fmCreate);

<Создаём заголовок файла ресурсов - все нули, за исключением
HeaderSize, ResType și Resid>
FillChar (FileHeader, sizeof (FileHeader), # 0);
FileHeader.HeaderSize: = sizeof (FileHeader);
FileHeader.ResId: = $ 0000FFFF;
FileHeader.ResType: = $ 0000FFFF;

<Создаём заголовок данных для RC_DATA файла
Notă: pentru a crea mai multe resurse, trebuie
repeta procesul următor, de fiecare dată folosind un alt
ID-ul de resurse>
FillChar (ResHeader, sizeof (ResHeader), # 0);
ResHeader.HeaderSize: = sizeof (ResHeader);
// ID-ul resursei - FFFF înseamnă „nu este un șir de caractere!“
ResHeader.ResId: = $ 0000FFFF sau (barbotare shl 16);
// tipul de resursă - RT_RCDATA (de la unitatea de Windows)
ResHeader.ResType: = $ 0000FFFF
sau (WORD (RT_RCDATA) shl 16);
// dimensiunea datelor - acolo Mărime fișier
ResHeader.DataSize: = FS.Size;
// Setați memoria steaguri necesare
ResHeader.MemoryFlags: = $ 0030;

<Записываем заголовки в файл ресурсов>
RS.WriteBuffer (FileHeader, sizeof (FileHeader));
RS.WriteBuffer (ResHeader, sizeof (ResHeader));

gunoi va face!>
dacă FS.Size mod sizeof (DWORD) <> 0 atunci
RS.WriteBuffer (padding, sizeof (DWORD) -
FS.Size mod sizeof (DWORD));

Acest cod nu este foarte frumos, și nu există nici o eroare de manipulare. Este înțelept să creeze o clasă care include acest exemplu.

Extrăgând resurse EXE

Acum considerăm un exemplu care arată cum de a extrage resurse din modulul executabil.

Tot ceea ce este necesar este de a obține exe-Schnick instanță sau dll (în cererea dumneavoastră este Application.Instance sau Application.Handle, pentru dll trebuie să-l tine :)
Resid
același ID. care a fost alocată o resursă
ResType: WAVEFILE, Bitmap, CURSOR, CUSTOM
Acest tip de resurse care pot lucra, dar am fost capabil de a efectua cu succes procedura de numai CUSTOM
FileName
este numele de fișier pe care doriți să creați din resursa