[Tutorial] Adicionando e extraindo arquivos de seu executável

Started by whit3_sh4rk, 14 de May , 2007, 07:08:56 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

whit3_sh4rk

E aí pessoal.. já tive essa dúvida e creio que muita gente ainda tem.. Se trata de poder armazenar arquivos dentro de seu projeto e depois poder extraí-los para utilizá-los.

Como faremos isso? Simplesmente usaremos Resources.. ou traduzindo Recursos, seriam arquivos de suporte para algum tipo de programa, podemos inserir vários e extraí-los em tempo de execução para podermos utilizá-los.

Sua extensão é .RES, mas para criarmos este arquivo, precisamos antes do que chamamos de Resource Script File, um arquivo com a extensão .RC, onde ficará quais arquivos iremos adicionar em nosso projeto para depois podermos manipular cada um individualmente.

Resource Script File
A estrutura desse tipo de arquivo segue no exemplo:
QuoteNOME_DO_RECURSO  TIPO_DE_RECURSO  NOME_DO_ARQUIVO

Ex.:
Foto BITMAP Praia.bmp
Entrada WAVE "C:\SONS\Entrada.wav"
Intro AVI "C:\Intro.avi"
Wallpaper JPEG Wall.jpeg
Leiame TEXT Leia.txt
ICONE ICON Logo.ico

Para outros tipos de arquivos, podemos utilizar somente o RCDATA:
QuoteSonzin RCDATA musica.mp3
Arquivo RCDATA Test.exe
...

Prática
Iremos então criar aqui um executável que irá armazenar um outro executável e quando quisermos ele irá extraí-lo.

Crie uma pasta separada para este projeto..

No delphi, crie um projeto qualquer, exemplo:


Compile o projeto, não tem necessidade de salvá-lo. Simplesmente vá no diretório:
Quote%programfiles%\Borland\Delphi7\Projects\

Renomeie o arquivo Project1.exe para Tuto.exe e copie para a pasta que você havia criado.

Crie então um arquivo no bloco de notas mesmo e insira:
QuoteTuto RCDATA Tuto.exe

E salve na mesma pasta como: Tutorial.rc.

Iremos compilar este arquivo, utilizando uma ferramenta chamada: Borland Resource Compiler.
A mesma já vem com o delphi, e fica na pasta Bin.

Vá pelo executar mesmo e coloque:
Quote"%programfiles%\Borland\Delphi7\Bin\brcc32.exe" "C:\SUA PASTA\Tutorial.rc"

Será criado um arquivo .RES em sua pasta.

Pode remover o arquivo .RC, não precisaremos mais dele.

Inicie agora um projeto no delphi e deixe-o bem simples, afinal de contas trata-se apenas de um exemplo:


No evento OnClick do botão iremos utilizar a seguinte rotina para extrair o recurso:
Quotebegin
with TResourceStream.Create(HInstance, 'TUTO', RT_RCDATA) do
  try
    SaveToFile('Arquivo_Extraido.exe');
  finally
    Free;
  end;
end;


Vamos entender os parâmetros:
TResourceStream.Create(
Instance: Cardinal,
ResName: String,
ResType: PAnsiChar)


Instance = Instância
Quando nosso aplicativo está rodando, é considerado que uma instância do mesmo está sendo rodada, o que foi utilizado como parâmetro:hInstance é um padrão que podemos utilizar na função para obter o handle do recurso que estamos criando.

ResName = Nome do recurso

ResType = Tipo de recurso

Exemplos:
TResourceStream.Create(Hinstance, 'FUNCOES', 'DLLFILE');
TResourceStream.Create(Hinstance, 'Entrada', 'WAVE');

No nosso foi utilizado o tipo: RT_RCDATA porque é um tipo de recurso predefinido..
Para ícone poderia ser utilizado por exemplo o RT_ICON.

Para obter interação com o usuário do programa, pode-se utilizar o SaveDialog e implementar na hora de extrair o recurso(SaveToFile), use sua imaginação  ;)


Fontes de pesquisa:
http://delphi.about.com
http://msdn2.microsoft.com


[]s

Hacker Xtreme

hummm, eu vi no chmod seu tuto, li ele agora hehe, mt lgl =0 eu conhecia este metodo a um tempo atrás hehe..

Casanova

Muito bom gostei mesmo era uma das coisas que eu estava procurando !