Supprimer des DLLs [Résolu]

Signaler
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013
-
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013
-
Salut,

Je suis entrain de faire un programme avec Visual C++ (2010), et mon problème est le suivant : Si je veux lancer mon script sur un autre ordinateur, il faut que les DLLs msvcp100d.dll et msvcr100d.dll soient présentes sur l'ordinateur concerné.
Je ne sais pas à quoi servent ces DLLs, ni d'où elle viennent.

Donc, ma question est la suivante : Comment pourrais-je faire pour que mon programme n'ai plus besoin de ces DLLs ?

Merci d'avance pour vos réponses...

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Alors tu te passes de tout CRT comme dans mon exemple.


ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Je viens de jeter un coup d'oeil sur ton code. Ton exécutable dépendra de msvcr100d.dll car tu utilises les fonctions de la CRT comme malloc(), free(), strcpy() etc. Il dépendra de msvcp100d.dll car tu utilises par exemple la classe C++ std::string. Pour intégrer ces fonctions en statique à ton exécutable, vas dans les propriétés de ton projet, puis dans "Configuration Properties" choisis "C/C++" puis "Code Generation". Pour "Runtime Library" choisis "Multi-threaded (/MTd)". A noter que seules les fonctions des DLLs utilisées par ton code qui seront intégrées à ton exécutable. Comme remarqué par BruNews, il parait que tu compiles en Debug. Si tu comptes distribuer ton programme tu dois compiler en Release. Ainsi, ton exécutable sera beaucoup plus petit. Pour le mode Release, choisis "Multi-threaded (/MT)" pour "Runtime Library" dans les options de génération de code vues ci-dessus.
Pour rendre ton exécutable totalement indépendant de ces DLLs, tu dois opter pour la solution proposée par BruNews. Pour cela, tu ne dois pas utiliser les fonctions de la CRT, ni les fonctions C++ (comme new(), delete() ect) ni les classes de la STL. Pour la CRT, tu peux remplacer les fonctions par leurs équivalents en Win32 API. Par exemple, strcpy() par lstrcpy(), malloc() par HeapAlloc() etc.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Tu compiles en debug ???

Regarde ici:
http://www.cppfrance.com/code.aspx?ID=53531

Tu verras qu'on peut compiler avec les binaaires de VC++ et n'avoir aucune dépendance (DLLs a livrer).

ciao...
BruNews, MVP VC++
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013

Désolé, mais je n'ai pas vraiment compris comment ça fonctionne.

Tu peux m'expliquer s'il te plait ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
"un programme avec Visual C++"
Voila qui ne nous dit rien de ce que tu fais.

VC++ est un IDE qui permet d'y faire de l'interprété (tous langages .NET), du natif mais avec surcouches (C++ avec MFC), du C/C++ classique avec CRT, ...

On peut aussi décider qu'on codera tout soi meme (voir lien que je t'ai mis plus haut pour exemple).

ciao...
BruNews, MVP VC++
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013

Ah oui, excuse-moi, j'ai oublié de dire que je faisais du C++
Si tu veux les sources, je fais ça : http://fsp.lecoindaide.com/Sources

Je sais pas trop ce qui appelle ces DLLs, ni comment les enlever.
Après, je préférerais qu'elles ne soient pas utilisées plutôt que de les inclure, parceque ça va augmenter la taille de mon programme (ce que je ne souhaite pas trop).

Mais, je suis ouvert à toutes les solutions
Messages postés
22
Date d'inscription
mercredi 4 avril 2012
Statut
Membre
Dernière intervention
9 février 2013

Merci BruNews pour tes explications, et merci à racpp pour les avoir traduites dans un langage que je comprend.