logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog


Distribuindo aplicações feitas com o Visual C++ 8

O Visual C++ 8 (que faz parte do Visual Studio 2005) trás além de diversas melhorias, mudanças na distribuição dos softwares compilados com ele. Algumas coisas importantes devem ser notadas, como o fato de que distribuir aplicações em versão DEBUG é uma violação de EULA.

O Visual C++ é atualmente a única ferramenta da Microsoft que possibilita que você compile um programa que não depende de runtimes ou DLLs adicionais, um programa que é 100% Windows e só. Mesmo assim, para fins de redução de tamanho dos arquivos binários e para facilitar a distribuição, muitos programadores preferem fazer link do aplicativo com a msvcr80.dll, mfc80.dll e atl80.dll. Nesse quesito, a grande mudança no Visual C++ 8 é que as runtimes da MFC e ATL devem ser distribuídas usando MSI ou mantidas na pasta do aplicativo (o que é uma recomendação antiga da Microsoft para diminuir do DLL Hell). O MSI (ou merge module se você fizer seu próprio setup) instalará as runtimes usando o recurso Shared Assemblies do Windows XP ou superior, para evitar que atualizações da runtime quebrem programas que estejam funcionando.

(Só não esqueça que o Shared Assemblies é um recurso do Windows e não do .NET. As runtimes do Visual C++ 8 não têm qualquer dependência do .NET Framework e seus programas C++ serão nativos como sempre foram. C++ == nativo/unmanaged, C++/CLI == .NET/managed.)

Apesar dos novos complicadores, existe uma documentação bem explicada e detalhada na MSDN, com destaque para o How to deploy using XCOPY e Visual C++ Libraries as Shared Side-by-Side Assemblies, que lista as DLLs necessárias e suas respectivas funções.

Se mesmo assim a coisa complicar, configure o seu projeto para fazer link estático com todas as bibliotecas (C++ runtime, MFC ou ATL) e você terá o velho e bom executável sem dependências e que roda em qualquer máquina com Windows instalado. :-)


Em 22/02/2006 20:41, por Rodrigo Strauss


  
 
 
Comentários
Hugo Parente Lima | em 27/02/2006 | #
É uma decisão dificil... escolher entre facilidade (linkar tudo estaticamente) ou fazer seu executavel comer menos memoria... (linkar tudo dinamicamente e rodando com as dll's que tiverem em windows\system\etc...)
Luiz Alves | em 28/04/2006 | #
Estou interessado em avaliar o VC++8 para codificação de sistema de tempo real. A questão de "comer menos memória" me é interessante. Você experimentou este tipo de sistema com este software? Qual uma boa bibliografia para o produto além do help?
Rodrigo Strauss | website | em 28/04/2006 | #
Em C++ você só paga por aquilo que você usa. Como você aloca e desaloca sua própria memória, você pode gerenciá-la como quiser.

Você pode ler qualquer livro de C++, não precisa ser específico de Visual C++
Lucas | em 30/04/2006 | #
bom eu sei qui aqui nao eh u lugar correto pra mim pedi isso e tal mas vejo aqui como meu ultimo recusro... ja que taum falandu em dll eu preciso de ajudaa... eu fui instalar um jogo e qnd eu vou instalar da o seguinte erro:

Executable 'E:\setup\rsrc\cod2.EXE' had the following error: Couldn't find library MSVCR80.dll (required by C:/ARQUIV~1\WINDOW~4\MpShHook.dll)
Please ensure that it is installed

eu sei que esta totalmente fora do contexto do qui é para comentar peço mil desculpas, mas se puder me ajudar brigadao!
e novamente desculpas por nao se tratar do assuntu tratado ae em cima. Desculpa mesmo!

Abração!
Rodrigo Strauss | website | em 01/05/2006 | #
Baixe e instale a runtime do Visual C++ 8 em

http://www.microsoft.com/downloads/details.aspx?familyid=32B...
viinicius | em 21/09/2006 | #
Como que eu faço para criar um projeto linkado staticamente com as bibliotecas MFC e ATL? Para evitar o erro de falta da msvcr80.dll

Abraços
Vinicius
Rodrigo Strauss | website | em 21/09/2006 | #
Propriedades do projeto, C/C++, Code Generation, Runtime Library. Mude para a versão estática.
vinicius | em 21/09/2006 | #
Obrigado cara,

Mas ainda tenho um problema. Estou colocando o IMSL para funcionar com o visual studio e compilo e crio o executavel sem problemas.

Quando vou executar fala que falta a msvcr80.dll, mesmo colocando no Runtime Library a opcao Multi-threaded.

O que eu posso fazer para resolver isso?

Abraços
Rodrigo Strauss | website | em 22/09/2006 | #
O que é IMSL?
vinicius | em 22/09/2006 | #
Cara,

IMSL são um conjunto de funcoes matematicas, mas o problema não está nisso, acredito eu. Pois compila e dá o build bonito.

Acontece que na hora de executar fala que falta a dll que coloquei no post anterior.

Tem alguma idéia?

Abraços
Vinicius
Rodrigo Strauss | website | em 22/09/2006 | #
As configurações para MFC e ATL ficam na parte "General" das propriedades do projeto. Veja "Use of MFC" e "Use of ATL".
rebarba rebarba
  ::::