Professional Documents
Culture Documents
F-XC A N GE
H
F-XC A N GE
N
y
bu
k
to
c u-tr a c k
.d o
.c
.d o
lic
15/12/2008
lic
to
bu
O
W
!
PD
O
W
!
PD
c u-tr a c k
1. V ao prompt do DOS e c rie um arquivo qualquer no formato texto com a extenso .rc (para manter uma coernc ia, chamarei-o de MIDAS.RC).
Esse arquivo dever possuir uma linha para cada arquivo a ser transformado em rec urso. Nesse exemplo c onter apenas uma linha, pois trabalharei
apenas com o MIDAS.DLL. Sua estrutura dever ser:
MIDASDLL DLLFILE C:\WINDOWS\SYSTEM\MIDAS.DLL
O primeiro parmetro o label a ser atribuido ao arquivo (Ser utilizado pelo delphi pra ac har o rec urso).
O segundo apenas um identific ador do tipo de arquivo.
O terceiro o path onde o c ompilador de rec ursos ir busc ar o arquivo para
transformar em .RES.
2. Exec ute o compilador de recursos que acompanha o delphi: Est na pasta BIN e se chama BRCC32.EXE. Este um programa do DOS, portanto se
voc no estiver na pasta BIN do delphi, tenha a c erteza que sua vriavel PATH esteja apontando para l. ( Se quiser c onfigurar na mo digite no
DOS:
SET PATH=%PATH%;diretorio_delphi\bin)
Para transformar o arquivo .RC em .RES digite:
BRCC32 MIDAS.RC
D um comando DIR e verifique a existnc ia do arquivo MIDAS.RES (Se no
enc ontrar, revise os proc edimentos).
CRIANDO UM PROGRAMA QUE LEVA A DLL EMBUTIDA
Veja agora c omo c riar um programa que embute a DLL no seu executvel:
www.delphibr.com.br/artigos/res.php
1/2
.c
H
F-XC A N GE
H
F-XC A N GE
N
y
bu
k
to
.d o
Begin
.c
.d o
ck
tory(Buffer,144);
c u - t r aGetSystemDirec
Result := StrPas(Buffer);
End;
lic
15/12/2008
lic
to
bu
O
W
!
PD
O
W
!
PD
c u-tr a c k
.c
end.
AUTO-EXTRAINDO A DLL
Uma tcnic a interessante a auto-extra o da DLL no momento da inic ializao de sua aplica o sem a nec essidade da c hamada explicita procedure
SaveMidasDLL.
Vamos utilizar o recurso de auto-inic ializa o das Units implementado pelo Delphi.
Para quem no c onhece, o Delphi quando carrega uma Unit ele exec uta automaticamente o c digo dentro do bloc o INITIALIZATION antes mesmo da
aplicao ser totalmente inicializada, um exc elente ganc ho para se coloc ar rotinas de inic ializa o. O mais espertos j perc eberam que o Bloc o
FINALIZATION faz o mesmo efeito, porm ao finalizar a exec u o da aplic a o.
Para ver a auto-extrao, ac resc ente o bloc o de c digo abaixo ao final da Unit do Form:
Initialization
Begin
ShowMessage('Gerando o arquivo MIDAS.DLL');
SaveMidasDLL;
End;
End.
Veja que agora, quando o form criado (e a unit ac ionada), a procedure SaveMidasDLL exec utada automaticamente.
PROBLEMAS
Dependendo da forma c omo sua aplic ao foi criada voc pode se deparar com um problema: Uma parte do cdigo pode estar c hamando um arquivo que
ainda no foi extraido (situa o muito comum c om aplic aes que c hamam DLL's na sua inic ializa o).
Uma boa tc nica ac rescentar o c digo de extrao no arquivo .DPR, assim ele ser ac ionado antes de qualquer outra rotina da aplic ao.
Eu partic ularmente prefiro outra tcnic a: Colocar as rotinas de auto-extra o em uma unit exclusiva e c ham-la primeiramente na minha aplic ao, o
cdigo fic a mais limpo, e t odas as vezes que voc prec isar usar o rec urso basta apenas acresc ent- la sua c lusula Uses.
Veja o cdigo pronto:
unit AutoMidas;
interface
Uses Windows, Classes, Sysutils, Forms,Dialogs;
Function Extrac tSystemDir : String;
Procedure SaveMIDASDLL;
implementation
{$R MIDAS.RES}
Procedure SaveMIDASDLL;
Var PathToSave:String;
Res : TResourc eStream;
Begin
PathToSave := ExtractFilePath(Applic ation.ExeName)+'\MIDAS.DLL';
If not FileExists(PathToSave) Then Begin
Res := TResourceStream.Create(Hinstanc e, 'MIDASDLL', 'DLLFILE');
Try
Res.SavetoFile(PathToSave);
Finally
Res.Free;
End;
End;
End;
Function Extrac tSystemDir : String;
Var Buffer : Array[0..255] of Char;
Begin
GetSystemDirec tory(Buffer,144);
Result := StrPas(Buffer);
End;
Initialization
Begin
ShowMessage('Gerando o arquivo MIDAS.DLL');
SaveMidasDLL;
End;
end.
Importante: Para evitar o problema menc ionado acima, onde a aplic a o chama o arquivo antes de sua extra o, coloque sempre a sua Unit na primeira posi o da lista
PS: uso da MIDAS.DLL foi apenas para fins didtic os, o delphi permite o uso das units MidasLib+Crtl para distribui o desse arquivo de forma mais simples.
Adenilton Rodrigues tem forma o superior em Anlise de Sistemas. Consultor em Tecnologias de Desenvolvimento Internet e atualmente responde pelo
Departamento de Tec nologia da SOL - Servios Online (www.solnet.c om.br), onde implanta solu es em Delphi, Java e .NET.
www.delphibr.com.br/artigos/res.php
2/2