[C] Fournir un projet compilé sous Visual C++ à un ami

Fournir un projet compilé sous Visual C++ à un ami [C] - C - Programmation

Marsh Posté le 25-06-2008 à 16:58:49    

Bonjour  :)  
Je compile sous l'IDE Visual C++ 9.0 Express Edition, et une erreur survient lorsque l'utilisateur (qui n'a pas VC++) ouvre le fichier exécutable, alors que j'ai fourni tous les bons fichiers (DLL nécessaires pour librairies notamment).
Voici l'erreur :
 
http://duneudne.free.fr/erreur.jpg
 
J'ai appris que lorsque l'on compilait un projet sous Visual, il fallait fournir des DLL supplémentaires si on ne l'avait pas installé.
Ne voulant pas changer d'IDE, je vous demande quelles sont ces DLL (j'ai bien cherché sur des sites, notamment Microsoft, mais rien du tout).
Merci d'avance :)

Reply

Marsh Posté le 25-06-2008 à 16:58:49   

Reply

Marsh Posté le 25-06-2008 à 17:33:33    

Fais une recherche avec "Redistributable Package".


---------------
dap.developpez.com
Reply

Marsh Posté le 25-06-2008 à 17:44:18    

On me propose de le télécharger, mais peux-tu me dire à quoi cela va me servir o_O ?

Reply

Marsh Posté le 26-06-2008 à 00:13:03    

Ben ça permet de faire tourner les programmes de VC++ sans devoir l'installer. Ou bien tu peux compiler en statique.


---------------
dap.developpez.com
Reply

Marsh Posté le 26-06-2008 à 16:44:47    

"Compiler en statique"
Euh.... c'est quoi ça ???  :??:  
 
"Faire tourner les programmes de VC++ sans devoir l'installer"
Mon but est de fournir mon projet à un e personne qui n'a connaissance du C que comme la 3e lettre de l'alphabet  :sol: .
Est-il possible que mon exécutable (quitte à ce qu'il soit grossi) puisse être indépendant (peut-être compilé en statique c'est ça ?), ou bien que l'on fournisse les DLL nécessaires à un projet VC++ ?
Ca serait sympa :)
 
P.S.: Je travaille avec d'autres librairies (comme SDL et FMOD), donc je ne peux pas (et ne veux pas) me passer de DLLs.

Reply

Marsh Posté le 26-06-2008 à 18:42:20    

Oui quand c'est compilé en statique toutes les fonctions appelées sont copiées dans l'exécutable. Si c'est dynamique il faudra que les DLL soient là, soit tu fais un installeur, soit tu les mets dans le même répertoire de l'exécutable.


Message édité par dap++ le 26-06-2008 à 18:42:33

---------------
dap.developpez.com
Reply

Marsh Posté le 26-06-2008 à 19:11:02    

Génial, donc il me suffit de donner les DLL de VC++ nécessaires, tu les connais ? Merci beaucoup !

Reply

Marsh Posté le 26-06-2008 à 20:26:29    

Je pense que c'est un autre problème car lorsqu'une dll manque, il te l'annonce dans une boite de dialogue en la nommant.
 
De plus, j'ai exactement le meme probleme avec un programme développé par ma société : je le deploie sur une machine avec un windows vierge : ca ne marche pas (meme message que toi, sauf que ca a été compilé en Visual Studio 2005), et sur une autre machine vierge (portable Dell sortant de la boite), ca fonctionne. A vrai dire, le programme fonctionne meme partout sauf sur cette machine avec un windows vierge. Evidemment je n'ai aucune indication pourquoi il m'affiche un tel message (moins explicite tu meurs).
 
Je précise que le programme que j'essaie d'executer ne fait quasiment aucun appel systeme, excepté une creation de fenetre, un Bitblt pour l'affichage, quelques CreateThread et CreateMutex, des fonctions E/S pour parler sur un port COM, ainsi que la pile TCP-IP. Autant dire tout ce qu'il y a de plus classique (pas de .net, pas d'utilisation de controle graphique bizarre, pas de base de données etc ...).
 
Je flag pour avoir l'info car ça peut m'intéresser à l'occasion :)
 

Reply

Marsh Posté le 27-06-2008 à 17:26:04    

Ca serait gentil que quelqu'un me donne (enfin) le nom de ces DLL :D
En fait, ça ne marche que sur les ordis qui ont installé Visual C++ ; c'est pour ça que sur ton ordi vierge ça marche pas :) .

Reply

Marsh Posté le 27-06-2008 à 17:51:22    

Le redistributable package est prévu pour ça, c'est écrit dans la description :
"The Microsoft Visual C++ 2005 Redistributable Package (x86) installs runtime components of Visual C++ Libraries required to run applications developed with Visual C++ on a computer that does not have Visual C++ 2005 installed."
 
Le message d'erreur bizarre ça doit être parce qu'il y un nouveau système depuis VC++ 2005 (je crois) : les DLL sont dans WINDOWS\Winsxs et les programmes qui les utilisent doivent avoir un manifest qui décrit à quoi ils touchent. Quand il y a une erreur ça donne un message dans ce genre-là (de mémoire) et a priori c'est soit que quelque chose n'a pas été trouvé, soit que tu as mal chipoté au manifest.


---------------
dap.developpez.com
Reply

Marsh Posté le 27-06-2008 à 17:51:22   

Reply

Marsh Posté le 27-06-2008 à 18:55:34    

Excuse moi si je suis lourd, mais quelles sont les noms des DLL remplaçant le redistributable package :D

Reply

Marsh Posté le 27-06-2008 à 19:08:34    

Si la personne ne l'a pas installé dis-lui de le faire, de toute façon elle en aura sûrement besoin pour un autre programme. [:spamafote] Ou bien fais-lui un installeur. Si tu tiens à savoir les noms des DLL pour le C c'est des trucs du genre msvcr80.dll à mettre dans des répertoires de WINDOWS\WinSxS mais tu n'as pas à t'en soucier. :??:


---------------
dap.developpez.com
Reply

Marsh Posté le 27-06-2008 à 19:16:42    

En lui faisant un installeur on pourra y indiquer l'adresse du fichier d'installation ???

Reply

Marsh Posté le 27-06-2008 à 20:04:54    

Dune_22 a écrit :

Excuse moi si je suis lourd, mais quelles sont les noms des DLL remplaçant le redistributable package :D


Y'a pas.
Comme son nom l'indique, le redistributable package est un package à installer sur la machine du client pour faire tourner l'appli. Hormis l'assembleur, tous les langages nécessitent un runtime sur la machine cliente, car il ne faut pas croire que lorsque tu appelles la fonction "printf()" par exemple, elle tombe du ciel. Elle est contenue dans une dll qui est appelée par l'exécutable final.
Donc soit tu compiles tout en statique, soit tu fournis le redistributable package. Mais tu ne fais pas le boulot à moitié en donnant des dll piochées par ci par là. C'est le meilleur moyen de rendre le système instable.
Quant à indiquer l'adresse lors de l'installation, c'est un coup de canon pour tuer une mouche. Ecris donc l'adresse dans une doc que tu livres, et laisse ton client se débrouiller.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-06-2008 à 20:13:32    

et pourquoi ca n'est pas fourni en standard avec l'OS ?
 
c'est étonnant, j'ai eu le meme probleme sur une machine vierge , mais pas sur une autre (machine vierge egalement sortant du carton d'emballage). La seule différence : d'un coté un CD de windows XP SP2 OEM, de l'autre coté, un portable DELL avec l'OS préinstallé.
 
Cela dit, merci pour l'information, je vais chercher ce 'redistribuable package' et l'installer :)

Reply

Marsh Posté le 27-06-2008 à 21:02:48    

xilebo a écrit :

et pourquoi ca n'est pas fourni en standard avec l'OS ?


Certains runtimes sont préinstallés : .NET sous les Windows récents, le runtime VB, le framework MFC, etc...
Ceci dit, l'autre jour j'ai voulu installer .NET 3.5 sur le PC de ma copine qui était préinstallé avec .NET 1.1. Son PC tourne sous Windows XP Mediacenter. Et bien impossible d'installer une version plus récente que la 1.1. Ca explose MediaCenter. Et impossible de désinstaller le framework 1.1 non plus (même avec le .NET removal tool). J'ai du tout reformater. Une recherche sur les forums Microsoft m'a appris que MediaCenter ne pouvait fonctionner que sous 1.1, et qu'il interdisait l'utilisation d'un framework plus récent sinon il plantait... Du coup, elle est bloquée sur le framework 1.1... [:kiki]
Donc attention aux runtimes préinstallés aussi.
 

xilebo a écrit :


c'est étonnant, j'ai eu le meme probleme sur une machine vierge , mais pas sur une autre (machine vierge egalement sortant du carton d'emballage). La seule différence : d'un coté un CD de windows XP SP2 OEM, de l'autre coté, un portable DELL avec l'OS préinstallé.


Normal, les PC de constructeurs sont souvent livrés avec tout un tas de merdes programmes préinstallés, dont certains ont certainement besoin du runtime.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-06-2008 à 22:08:28    

Merci de l'explication :) effectivement les DELL (meme si c est une version pro, donc avec moins de "merdes" ) sont préinstallés avec quelques programmes, alors que le windows OEM non.
 
Y a-t-il un equivalent a ldd sous windows pour connaitre les dependances nécessaires à un executable ? process explorer est pas mal, mais il faut que le process soit lancé pour voir toutes ces infos :(

Reply

Marsh Posté le 27-06-2008 à 22:16:03    

Dependancy Walker


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-06-2008 à 17:02:54    

Citation :

Quant à indiquer l'adresse lors de l'installation, c'est un coup de canon pour tuer une mouche. Ecris donc l'adresse dans une doc que tu livres, et laisse ton client se débrouiller.


Euh... tout d'abord sache que mes clients sont pas du genre à se débrouiller ^^
J'ai déjà du mal à leur faire installer un fichier setup alors hein :D pour la doc
En fait je pensais plutôt à l'installation du redistribuable package PENDANT l'installlation du programme (Inno Setup). Par exemple lorsqu'en C++ on installe la librairie Qt, on nous propose de télécharger une version récente de MinGW...
Mais bon si ça pose trop de problème, je fournirait au client les deux fichiers d'installation, ça le tuera pas  :na:  .
Merci pour vos réponses :)

Reply

Marsh Posté le 29-06-2008 à 23:17:25    

salut, je ne connais pas inno setup mais il n'est sans doute pas impossible de lancer un programme quelconque avant (ou après) la phase de copie des fichiers de ton application ?
en lancer le setup du package microsoft en ligne de commande plus un petit /? ou -help avec un peu de chance il existe des options pour le lancer en mode silencieux, au pire il doit y avoir une option depuis inno setup.
de plus, ce package ne fait sans doute pas qu'une copie de nouveaux fichiers systèmes, il fait peut être aussi des inscriptions en base de registre !
il faut peut être prévoir un reboot en fin d'installation
si tes clients ne sont pas du genre à se débrouiller il vaut mieux faire une setup bien clean, qui marche a 100% mais une bonne doc est parfois aussi efficace
j'ai deja eu le coup avec une appli dont l'impression (crystal report) ne fonctionnait pas si la rdcruntime n'était pas installée. Si c'est de ce package dont il est question le setup est même différent d'un os à un autre (nt / win2000)


Message édité par djobidjoba le 29-06-2008 à 23:30:40
Reply

Marsh Posté le 30-06-2008 à 17:45:41    

Ok InnoSetup est un logiciel pour créer des installations. Je pensais que c'était le plus connu, mais visiblement non :D.
Inno Setup ne propose pas d'explication claire là-dessus, et il faudrait le coder dans le script, or je ne m'y connais pas ; donc je pense plutôt que je vais leur fournir deux logiciels d'installation, et à la fin de l'installation du projet C, je ferai ouvrir un .txt pour informer l'utilisateur de la necessité de lancer le Redistribuadble Package :)
Voilà dernière petite question, je pense que la version 3.5 suffira amplement non ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed