La solution la plus simple, ce serait d'enregistrer le programme qui dit bonjour, dans sa forme compilée, dans ton code, et si le type le demande tu ouvre un fichier, et tu écris la forme compilée dedans, et à la fin t'as un executable en plus.
Chaud cacao.
Je dirais qu'il faut mettre gcc dans le même répertoire. Tu écris un fichier main.c (à l'aide des fonctions d'écritures dans des fichiers) et tu lances la compilation en appelant gcc.
C'est pas un peu lourd quand même?Et vous pouriez me donner un exempemple d'appel de compilateur?Ca fonctionne comme "lire et ecrir dans des fichiers"?
C'est un peu compliqué.
D'abord j'ai un programme "lire_executable" qui lit un fichier binaire (.exe) et qui écrit dans un fichier .c, en copiant (en gros) le fichier binaire dans le .c
Ensuite, j'ouvre le .c créé, je rajoute en haut un include vers une librairie que j'ai écrite, et qui permet d'écrire un binaire depuis la forme enregistrée dans le fichier.
Toujours dans le .c, je vais dans le main, et j'appelle la fonction de la librairie qui va demander un fichier de sortie binaire (un .exe) et y écrire le code dedans.
Voici le fichier lire_executable.c, qui sait lire un executable et générer un fichier .c qui contient l'executable :
Voici comment je les utilise.
J'ai écrit un programme qui dit bonjour (je vous laisse faire le code). Je compile le programme pour obtenir un l'executable bonjour.exe.
Ensuite je compile lire_executable.c et je lance le résultat.
Il me demande le "nom du fichier à lire", j'écris 'bonjour.exe' (il existe déja). Ensuite il demande le "nom du fichier à écrire", j'écris 'contient_bonjour.c'.
Il crée donc un fichier contient_bonjour.c, qui chez moi (mais chez vous il sera différent, ça dépend de l'executable) contient ça (pour des raisons techniques j'ai rajouté des sauts de ligne dans la chaine, mais en vrai il n'y en a pas):
(vous avez remarqué qu'"executable" est le nom de la variable qui contient mon executable).
Ensuite je lie contient_bonjour.c et demander_executable.c (et .h) dans un même projet, je compile le tout, et j'execute le résultat.
Il me demande "dans quel fichier écrire un programme qui dit bonjour ?" (il faudra changer ça, pour avoir un message plus générique, mais c'est pas grave), je lui dit 'copie_bonjour.exe', et il crée 'copie_bonjour.exe'. Après, je peux executer copie_bonjour.exe, et il dit bien bonjour.
Par ailleurs, cette technique peut s'appliquer à d'autres choses que des .exe : on peut enregistrer une image, une archive, et caetera dans du code source, mais c'est assez moche comme manière de faire.
(et c'est pas une raison pour venir flooder ensuite, hein)
Par ailleurs, il faudrait l'améliorer un peu pour que ça soit plus utilisable :
- demander le nom à donner à la chaine qui stocke le gros caca
- mettre le gros caca dans un fichier .h, et l'inclure dans le programme principal (au lieu de l'avoir en plein milieu de la source), comme ça on pourrait en mettre plusieurs dans un même programme en plus.
Maintenant que comme dit Annacconda j'ai fini le truc bien tordu, ça m'intéresse pas des masses de faire les ptites bidouilles qui suivent, mais si vous voulez vraiment vous servir de ce truc, libre à vous de le faire.
Et voilà bluestorm vient de dégoûter à vie le petit zéro qui espérait qu'il existe une fonction toute prête en C pour faire ça
Technique intéressante au pasage.
Un .c, tout simplement. On fait ça tout le temps chez nous quand un CPU central doit charger le code d'un FPGA ou d'un DSP... J'ai fait un générateur de code qui sort un .c et .h comme ça par exemple :
j'avais oublié que sous Linux embarqué, on se contentait de placer le fichier binaire sur le disque flash et de le télécharger dans le FPGA à la volée... Ca évite d'encombrer la mémoire avec des données lues une seule fois... (400 k en embarqué, c'est pas rien...)
/* ------------------------------------------------------------------------
AUTOMATICALLY GENERATED FILE. DO NOT EDIT.
Made from 3\code.s 15-04-2005 09:02:16
File: ..\3\code_dsp.h
generated: 15-04-2005 10:18:43
by: S1to68k (c) AETA 2000-2002
1.15 built on Dec 18 2002 at 13:01:17
------------------------------------------------------------------------ */ #ifdef __cplusplus extern"C" { #endif
/* ------------------------------------------------------------------------
AUTOMATICALLY GENERATED FILE. DO NOT EDIT.
Made from 3\code.s 15-04-2005 09:02:16
File: ..\3\code_dsp.c
generated: 15-04-2005 10:18:43
by: S1to68k (c) AETA 2000-2002
1.15 built on Dec 18 2002 at 13:01:17
------------------------------------------------------------------------ */
#ifdef __cplusplus #error This source file is not C++ but rather C. Please use a C-compiler #endif
Je voudrais donner à l'utilisateur la possibilité de créer un programme dont il choisira certaines options.Le programme n'est donc pas entierement prédéfini, car certaines parties dépendes du choix de l'utilisateur.Pour faire "simple",le programme demande le nom de l'utilisateur et créé ensuite un programme qui lui dit bonjour avec son nom.C'est un exemple parmis beaucoup d'autres, mais c'est pour vous montrer le genre de programme que je voudrais faire.
Peut être aussi que le C n'est pas le language le plus adapté pour ce genre de programme.
N'est il pas plus simple de créer un simple executable avec un fichier de configuration? Au premier lancement du programme (lorsque le fichier de configuration n'existe pas), tu poses une série de questions à l'utilisateur que tu enregistres dans un fichier. Une fois les informations completées, tu rentres réelement dans ton programme avec éventuellement un menu et la possibilité de modifier le fichier de configuration. A toi de voir ce dont tu as besoin.
Je voudrais donner à l'utilisateur la possibilité de créer un programme dont il choisira certaines options.Le programme n'est donc pas entierement prédéfini, car certaines parties dépendes du choix de l'utilisateur.Pour faire "simple",le programme demande le nom de l'utilisateur et créé ensuite un programme qui lui dit bonjour avec son nom.C'est un exemple parmis beaucoup d'autres, mais c'est pour vous montrer le genre de programme que je voudrais faire.
Peut être aussi que le C n'est pas le language le plus adapté pour ce genre de programme.
Pour générer un programme, pas le choix, il faut un compilateur, ce qui et très lourd (compilateur C, C++, linker, bibliothèques, headers... tu veux installer tout ça chez le client ?).
Dans la pratique, on ecrit un programme générique qui est éventuellement capable d'adapter son comportement par fichier de configuration. En utilisation, on ne touche jamais à une seule ligne de code. On joue sur les données des fichiers de config. Je ne connais pas d'exemple de code recompilé à la volée selon les désirs de l'utilisateur. Ce serait beaucoup trop compliqué à mettre en oeuvre et probablement sans intérêt.
Comment fonctionne un éditeur de texte ?C'est bien un programme qui créé un fichier.Bon OK c'est pas encore un programme mais ca fait quelque chose quand même non ?Il est possible de créer des programmes avec un simple fichier texte, en enregistrant le code sous un nom d'extension comme .js (java script) ou .vb(visual basic).Dans les deux cas, il n'y a pas de compilation!Si on créé un fichier texte que lon enregistre en .exe ?...
Je croi que ce qu'il veut faire c'est comme un mini fichier setup comme sur windows. Donc en fait un programme qui en installe un autre. Et si je ne m'abuse ses setup ne trainent pas un compilateur tout le temps non? Donc il doit y avoir un moyen
Alcor > les setups ne créent pas un programme. Le programme, les ressources sont stockées DANS le setup sous forme compressée (ou en externe pour les gros trucs).
Non mais à la rigueur tu pourrais faire ça avec un langage interprété, ça peut être marrant, mais en C c'est un peu casse-couille car il faut compiler et tout.
(bon, à la rigueur tu pourrais utiliser ma bidouille pour enregistrer gcc, mais ça fait un executable vraiment vraiment trop lourd quoi)
Il existe bien des programmes qui créeent des .exe sans se trainer tout un tas de caca pour compiler.Je r&pete ma question:pensez vous que le C est le language le plus adapté pour ce type de programme?Puisqu'il faut tout compiler, c'est vraiment pas évident!
Non tu a raison il y a toujours une compilation.En disant ca je pensais à un programme qui créé des applications mais je me suis gouré.
Comment on fait pour créer un .exe avec un programme?C'est quoi le language à utiliser?
Je crois qu'il pense a des choses comme RPG maker ?
Sinon, tout a été dit plus haut, il faut inclure les fichiers de ton compilateur avec ton programme puis appeler le compilateur. En C, c'est le moyen de créer un éxécutable a partir d'un autre, mais c'est vraiment loud alors que la méthode des fichiers de configurations est vraiment bien je trouve.
Non tu a raison il y a toujours une compilation.En disant ca je pensais à un programme qui créé des applications mais je me suis gouré.
Comment on fait pour créer un .exe avec un programme?C'est quoi le language à utiliser?
La plupart des compilateurs et linkers sont écrits en C. C'est compliqué.
Si tu arrives à trouver le 'Dragon Book (AHO - ADDISON WESLEY)', tu vas comprendre ta douleur...
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
If you'd like to join us, read "How do we work at OpenClassrooms"! :)