 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
arctures Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011 Mensagens: 112
|
Enviada: Sex Jul 15, 2011 10:54 pm Assunto: Como gerar executável menor? |
|
|
Tem alguma forma de deixar o executável gerado pelo delphi menor. Queria saber se isso é possível? Lembrando que não quero compactar o exe.
Estava analizando aqui um arquivo exe gerado pelo MASM e tem 3Kb, pelo Delphi uns 400Kb, pior ainda pelo Lazarus 6Mb, queria tambem saber porque essa díferença gerada pelo compilador.
muito obrigado a que poder ajudar. |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sáb Jul 16, 2011 12:36 am Assunto: |
|
|
o masm32 utiliza em grande parte de api do windows e assembler de mais alto nível, em que assemelha-se a um linguagem como o c.
Além do mais é um codigo mais complicado de se escrever, apesar que o masm32 é bem melhor que assembler puro, pelo menos é mais compreensível. Mas sua complexidade é tanto quanto o próprio C que também é uma linguagem entre o baixo nível e o alto nível, sendo tao complexo quanto.
O delphi tb pode gerar executáveis menores, bastando para isto vc nao usar a vcl, neste caso todos os eventos devem ser feitos na mao, tal como no masm32, como os eventos de teclado, mouse, desenho da tela, botoes e etc.
Claro que isto toma tempo, mas se a pessoa quer um aplicativo que seja minúsculo, como um vírus por exemplo nao vai utilizar de qualquer modo componentes visuais e tentara de todo modo reduzir ao máximo a dependencia de terceiros, colocando as funçoes que acessa numa unit separada em vez de adicionar toda a unit.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
oneshotbr Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009 Mensagens: 1948 Localização: Taubaté - SP
|
Enviada: Sáb Jul 16, 2011 1:57 am Assunto: |
|
|
Citação: | Tem alguma forma de deixar o executável gerado pelo delphi menor. Queria saber se isso é possível? Lembrando que não quero compactar o exe.
Estava analizando aqui um arquivo exe gerado pelo MASM e tem 3Kb, pelo Delphi uns 400Kb, pior ainda pelo Lazarus 6Mb, queria tambem saber porque essa díferença gerada pelo compilador.
muito obrigado a que poder ajudar. |
Qual versão do Delphi você usa ? O Lazarus realmente tem esse problema mas existe uma opção que você desmarca e perde o debugger ele gera o executável menor. _________________ AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64. |
|
Voltar ao Topo |
|
 |
arctures Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011 Mensagens: 112
|
Enviada: Sáb Jul 16, 2011 11:15 am Assunto: |
|
|
Tenho aqui o Delphi 7 e no Lazarus eu já conhecia essa opção, só que alem de tirar o debugger gera tambem uns 1,5Mb, fora esse problema do lazarus o resto é muito bom.
Oque eu queria era mais ou menos isso que nosso amigo falo ae usar só algumas partes da unit, porem por alguns testes que fiz aqui vai se meio difício colocar numa unit separada a maioria das funções estão todas ligada uma na outra, ou tambem linkar só as funções que iria usar, criar um lib separado, alguma coisa nesse tipo. |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sáb Jul 16, 2011 3:14 pm Assunto: |
|
|
Amigo se vc quiser eu te passo um scanner que utiliza esta técnica, altém de ser multi-thread, basta vc dar uma private message com seu email.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
arctures Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011 Mensagens: 112
|
Enviada: Sáb Jul 16, 2011 9:38 pm Assunto: |
|
|
Quero Sim, meu email e o mesmo, manda la pra mim fazendo favor, valeu. |
|
Voltar ao Topo |
|
 |
arctures Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011 Mensagens: 112
|
Enviada: Sáb Jul 16, 2011 9:46 pm Assunto: |
|
|
Uma coisa que lembrei sobre o Masm32 e que ele linka das units só as funções que usa, no começo não tinha entendido muito a idéia, mas analizando um executável Masm e um Delphi num editor hex, notei que no Delphi tem toda unit no executável, se o Delphi linka-se so as funções igual o Masm seria ótimo tambem (mais ou menos isso). Valeu. |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Dom Jul 17, 2011 12:32 pm Assunto: |
|
|
No delphi tb faz isto, note que até variaveis que nao fazem nada no seu codigo vc nem consegue marcar um break point, o compilador otimiza o codigo bem, mas depois em produçõa tem de desmarcar a opcao de debug que diminui ainda mais o executável, pois aih ele nao tem mais as informacoes de debug.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Dom Jul 17, 2011 3:01 pm Assunto: |
|
|
um exemplo de programa q compilando no d2007 ficou com 19k sem uso de compactadores
Código: | program Project1;
uses
Windows, Messages;
var
Terminado : Boolean = False;
function Proc(wnd,msg,wParam,lParam:longint):longint;stdcall;
begin
result:=0;
case msg of
WM_CLOSE:
begin
if MessageBox(wnd,'Deseja sair?','Teste',
MB_ICONEXCLAMATION or MB_YESNO)<>IDNO
then begin
DestroyWindow(wnd);
Terminado := True;
exit;
end;
end;
WM_KEYDOWN:
begin
if wParam = VK_ESCAPE then MessageBox(wnd, 'Esc', 'dd', MB_OK);
end;
else result:=DefWindowProc(wnd,msg,wParam,lParam);
end;
end;
function WinMain(hThisInst,hPrevInst:HINST; lpszArgs:pchar; nWinMode:integer):integer;
var
wnd:HWND;
msg:tMSG;
wcl:TWndClassEx;
cx,cy:integer;
begin
cx:=GetSystemMetrics(SM_CXFULLSCREEN);
cy:=GetSystemMetrics(SM_CYFULLSCREEN);
fillchar(wcl,sizeof(wcl),0);
wcl.hInstance:=hThisInst;
wcl.lpszClassName:='TTeste';
wcl.lpfnWndProc:=@proc;
wcl.style:=CS_DBLCLKS or CS_HREDRAW or CS_VREDRAW;
wcl.cbSize:=sizeof(TWndClassEx);
wcl.hIcon:=LoadIcon(0,IDI_APPLICATION);
wcl.hIconSm:=LoadIcon(0,IDI_WINLOGO);
wcl.hCursor:=LoadCursor(0,IDC_ARROW);
wcl.lpszMenuName:=nil;
wcl.cbClsExtra:=0;
wcl.cbWndExtra:=0;
wcl.hbrBackground:=0;
if RegisterClassEx(wcl)=0 then begin result:=0; exit; end;
wnd:=CreateWindow('TTeste','testesss',WS_OVERLAPPEDWINDOW,
(cx div 2)-320,(cy div 2)-230,640,480,0,0,hThisInst,nil);
ShowWindow(wnd,nWinMode);
UpdateWindow(wnd);
while not Terminado and GetMessage(msg,0,0,0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
result:=msg.wParam;
end;
begin
WinMain(hInstance,0,nil,1);
end.
|
|
|
Voltar ao Topo |
|
 |
arctures Aprendiz


Registrado: Quinta-Feira, 16 de Junho de 2011 Mensagens: 112
|
Enviada: Seg Jul 18, 2011 12:11 pm Assunto: |
|
|
Como faz agora pra colocar o botão no form
brincadeira, ta de boa
muito obrigado aew, ajudou na minha dúvida. |
|
Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Seg Jul 18, 2011 5:59 pm Assunto: .. |
|
|
-Aqui na empresa um .exe comum teria 60,7 mb.
-otimizamos ele pra 30.0
-depois disto ainda compactamos ele no 7Zip usando compactação modo ultra, fazendo o mesmo cair para 4,5 mb.
então no final teriamos um arquivo.7z de 4,5 mb.
01-Usamos o delphi 7, em Project --- Options na page
DEBUGGING desmarcamos todos os checks
ex: degug information, local symbols, reference, definitions, assertions, use debug dcus.
02-na page LINKER no group EXE AND DLL OPTION desmarcamos o generate consolte, o include td32 debug e include remote debug simbols.
ai clicamos ok, vamos em shift+f para da um build no exe novo, ele vai cair pra menos da metade do pacote, pq nestas opões eh a versão do usuario ai nao precisamos incluir nada de debug que usamos pra desenvolvimento entre outras coisas.. .que soh existem pra gente que desenvolve, pro usuario elel nao precisa disto ou seja so recebe o codigo puro.
isto eh muito util espero ter ajudado.. t + _________________ - Compartilhe seus conhecimentos - |
|
Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Seg Jul 18, 2011 6:00 pm Assunto: |
|
|
*shift+f9 pra dar um build ehhe recriar o .exe com as dcus e tudo mais. _________________ - Compartilhe seus conhecimentos - |
|
Voltar ao Topo |
|
 |
mocao18 Novato

Registrado: Quarta-Feira, 26 de Janeiro de 2011 Mensagens: 3
|
Enviada: Ter Jul 19, 2011 11:02 am Assunto: |
|
|
Achei interessante as configurações que passaram para deixar os executáveis do delphi menores, vou testar depois.
Não vi ninguém citando nesse tópico, mas existe um compactador de executáveis chamado UPX, já tive casos em que ele diminui o executável para apenas 20% do tamanho original, mas isso depende do tamanho. E o executável continua trabalhando da mesma maneira sem problema nenhum.
Fica a dica aí. |
|
Voltar ao Topo |
|
 |
rvercesi Mestre


Registrado: Segunda-Feira, 29 de Novembro de 2010 Mensagens: 912 Localização: Curitiba / PR
|
Enviada: Ter Jul 19, 2011 11:45 am Assunto: |
|
|
Já tive alguns problemas com o UPX. Em alguns casos o executável para de rodar e em alguns outros ele dá erros estranhos e retorna informações estranhas.
Mas na maioria das vezes funciona bem!
Mas convém testar muito bem ele antes de mandar o executável compactado por ele para produção! |
|
Voltar ao Topo |
|
 |
flaviowmf Aprendiz

Registrado: Quarta-Feira, 8 de Dezembro de 2004 Mensagens: 128
|
Enviada: Ter Jul 19, 2011 12:06 pm Assunto: |
|
|
Existe também o ASPack, nunca tive problemas com ele. |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|