Xilofeon
Messages postés55Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention14 avril 2007
-
2 mai 2004 à 15:31
cs_Thaeron
Messages postés202Date d'inscriptionvendredi 6 juillet 2001StatutMembreDernière intervention31 octobre 2007
-
4 mai 2004 à 17:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Thaeron
Messages postés202Date d'inscriptionvendredi 6 juillet 2001StatutMembreDernière intervention31 octobre 2007 4 mai 2004 à 17:55
" convertir en nom court est une bonne methode pour la compatibilite vieillerie.
Mais bon faut aussi arreter un jour de regarder en arriere." exact BruNews faudrai arreter les api win32 et passer sous GNU/Linux , les vieilleries c'est fini.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 4 mai 2004 à 01:00
Pour ceux qui ont envie d'apprendre quelque chose (rudimentaire, mais c'est déjà non nul) avec cette source dont l'idée est cependant interessante :
rassure toi brunews, le fichier exe produit (avec les bonnes options de linkage) n'est que de 3584 octets chez moi, c-a-d la meme taille qu'avec ton code. ouf !!!
pour ceux que ca interesse, pour réduire la taille de vos exe sous vc++ 6.0, ds les options de linkage (project, settings, link) :
enlever toutes les librairies de object/library modules
mettre MSVCRT.lib
essayer de compiler, et si lors de l'édition de lien, il y a des fonctions non résolues, rajouter uniquement la librairie de ces fonctions la. (suffit de chercher sur le net pour connaitre la libraire d'une fonction..)
exemple ici : les librairies utilisées sont MSVCRT.lib shell32.lib
(shell32 pour la fonction shellexecute)
enfin ds project options, rajouter /align:4096
Ha, et tout ca doit etre fait pour la version release (qui ne contient pas d'infos de debogage et qui est donc techniquement plus petite que la version debug)
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 3 mai 2004 à 21:26
je ne pense pas ca. par contre il existe un monde entre les couches d'abstraction dont tu as parlé, et cette source... tout n'est pas binaire, et je pense pas qu'il soit tres malin de produire ce code la pour faire ca...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 mai 2004 à 20:45
Si tu penses que imbuvable = code alors...
Au lieu de mettre des 'string' et autres couches d'abstraction, y a VB qui deja tout cela, au moins c'est naturellement lent et c'est coherent.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 3 mai 2004 à 20:29
D'ou une source imbuvable pour gagner 2 kilo octets, mais bon vu k'les disques durs ont les tailles d'un disquette, c'est vrai ke c'est utile.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mai 2004 à 23:45
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 2 mai 2004 à 21:56
ben je suis sous XP pro, dc jpense pas ke ca soit une vieillerie
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mai 2004 à 19:56
convertir en nom court est une bonne methode pour la compatibilite vieillerie.
Mais bon faut aussi arreter un jour de regarder en arriere.
Xilofeon
Messages postés55Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention14 avril 2007 2 mai 2004 à 19:48
Sa depend de l'os sa si je me trompe pas y'a ka partir de win 2000 et sup ke la commande del suporte les ".
D'ailleur BruNews en convertisant le repertoire+nom en version cour
sera pas mieu ? au moin sur que sa fonctionne partout.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 2 mai 2004 à 19:35
ben j'ai essayé d'enlever de lancer un .bat avec un del et un nom entre "" et ca a rien supprimer, alors ke le meme mais ou le nom est converti en court ca a marché. apré cé vré ke cé bizare ke ca marche sur certains ordis et pas d'autres
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mai 2004 à 19:31
Je viens de poser exe dans
"D:\Salut Lafoule youpi" et va encore.
Le nom du exe est entre guillemets dans le bat donc nom long ne doit pas gener normalement.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 2 mai 2004 à 19:19
ben ché moi, fo le convertir avec GetShortPathName() le nom du fichier. jai essayé et la ca marche
toi ptet tu l'as lancé depuis un dossier court...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mai 2004 à 19:01
Ah oui ?
J'avais fait sur un 2003 Server et la je viens de tester sur un XP, va bon idem.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 2 mai 2004 à 18:50
il marche pas chez moi ce programme. fin il se suprime pas du tout koi
Xilofeon
Messages postés55Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention14 avril 2007 2 mai 2004 à 17:45
Bien merci BruNews. Euh par contre mon .exe il a pas perdu 1 octé.
Y'a que le .pdb et .map qui ont diminué de taille.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 2 mai 2004 à 16:26
ok merci
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mai 2004 à 16:16
demande le listing asm avec code original C en plus pour reperer aisement.
Sur VS, options, onglet C/C++, Fichiers de sortie.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 2 mai 2004 à 16:06
comment on fait pour connaitre le code asm generé par le compilo pour une fonction ou un bout de code?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mai 2004 à 15:42
remets ton code dans la fonction SupprimeMoi() a la place du mien et compare la taille des exe, tu verras toi meme.
Tu peux aussi sortir le listing asm du compilo pour comparer, tu verras, y a pas photo.
Xilofeon
Messages postés55Date d'inscriptionmercredi 24 décembre 2003StatutMembreDernière intervention14 avril 2007 2 mai 2004 à 15:31
Euh veut rien dire je suis pas trés bon mais il fait koi de plus que ce ke j'ai mi dans le forum .
Pi mon code je l'utilise dans une appli win32.
C'est parceque j'utilise des string ?
Enfin si ce code et mieu je voudrai bien savoir pk
4 mai 2004 à 17:55
Mais bon faut aussi arreter un jour de regarder en arriere." exact BruNews faudrai arreter les api win32 et passer sous GNU/Linux , les vieilleries c'est fini.
4 mai 2004 à 01:00
#include <windows.h>
#include <stdio.h>
void SupprimeMoi()
{
FILE* FileBat;
char NomProgCourant[MAX_PATH];
char NomCourtProgCourant[MAX_PATH];
// Nom du fichier .bat temporaire.
char NomFichierBat[] = "temp.bat";
// On récupere le nom du prog courant
GetModuleFileName(NULL,NomProgCourant,sizeof(NomProgCourant));
// On le convertit en nom 'court'
GetShortPathName(NomProgCourant,NomCourtProgCourant,sizeof(NomCourtProgCourant));
// On essaie d'ecrire dans le fichier .bat.
if (FileBat = fopen(NomFichierBat, "wb"))
{
fprintf(FileBat, "echo off\r\ndel %s\r\ndel %s\r\n", NomCourtProgCourant, NomFichierBat);
fclose(FileBat);
}
// On exécute ce .bat.
ShellExecute(NULL, "open", NomFichierBat, NULL, NULL, SW_HIDE);
// On termine le programme principal.
exit(-1);
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
SupprimeMoi();
return 0;
}
rassure toi brunews, le fichier exe produit (avec les bonnes options de linkage) n'est que de 3584 octets chez moi, c-a-d la meme taille qu'avec ton code. ouf !!!
pour ceux que ca interesse, pour réduire la taille de vos exe sous vc++ 6.0, ds les options de linkage (project, settings, link) :
enlever toutes les librairies de object/library modules
mettre MSVCRT.lib
essayer de compiler, et si lors de l'édition de lien, il y a des fonctions non résolues, rajouter uniquement la librairie de ces fonctions la. (suffit de chercher sur le net pour connaitre la libraire d'une fonction..)
exemple ici : les librairies utilisées sont MSVCRT.lib shell32.lib
(shell32 pour la fonction shellexecute)
enfin ds project options, rajouter /align:4096
Ha, et tout ca doit etre fait pour la version release (qui ne contient pas d'infos de debogage et qui est donc techniquement plus petite que la version debug)
3 mai 2004 à 21:26
3 mai 2004 à 20:45
Au lieu de mettre des 'string' et autres couches d'abstraction, y a VB qui deja tout cela, au moins c'est naturellement lent et c'est coherent.
3 mai 2004 à 20:29
2 mai 2004 à 23:45
void SupprimeMoi()
{
HANDLE hfl;
DWORD len, d, v;
char buff[268], szexe[272], szbat[272];
len = GetTempPath(264, buff);
if(buff[len-1] != '\\') buff[len++] = '\\';
buff[len] = 't'; buff[len+1] = '.'; buff[len+2] = 'b';
buff[len+3] = 'a'; buff[len+4] = 't'; buff[len+5] = 0;
hfl = CreateFile(buff, GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if(hfl == INVALID_HANDLE_VALUE) return;
*((DWORD*) szbat) = 0x206C6564; // "del "
len = GetShortPathName(buff, szbat+4, 264) + 4;
*((DWORD*) szexe) = 0x6F686365; // "echo"
*((DWORD*) (szexe+4)) = 0x66666F20; // " off"
*((WORD*) (szexe+8)) = 0x0A0D;
WriteFile(hfl, szexe, 10, &v, 0);
GetModuleFileName(0, buff, 264);
*((DWORD*) szexe) = 0x206C6564; // "del "
d = GetShortPathName(buff, szexe+4, 264) + 4;
szexe[d] = 13; szexe[d+1] = 10;
WriteFile(hfl, szexe, d+2, &v, 0);
WriteFile(hfl, szbat, len, &v, 0);
CloseHandle(hfl);
*((DWORD*) szexe) = 0x6E65706F; // "open"
szexe[4] = 0; szbat[len+4] = 0;
ShellExecute(0, szexe, szbat+4, 0, 0, SW_HIDE);
}
2 mai 2004 à 21:56
2 mai 2004 à 19:56
Mais bon faut aussi arreter un jour de regarder en arriere.
2 mai 2004 à 19:48
D'ailleur BruNews en convertisant le repertoire+nom en version cour
sera pas mieu ? au moin sur que sa fonctionne partout.
2 mai 2004 à 19:35
2 mai 2004 à 19:31
"D:\Salut Lafoule youpi" et va encore.
Le nom du exe est entre guillemets dans le bat donc nom long ne doit pas gener normalement.
2 mai 2004 à 19:19
toi ptet tu l'as lancé depuis un dossier court...
2 mai 2004 à 19:01
J'avais fait sur un 2003 Server et la je viens de tester sur un XP, va bon idem.
2 mai 2004 à 18:50
2 mai 2004 à 17:45
Y'a que le .pdb et .map qui ont diminué de taille.
2 mai 2004 à 16:26
2 mai 2004 à 16:16
Sur VS, options, onglet C/C++, Fichiers de sortie.
2 mai 2004 à 16:06
2 mai 2004 à 15:42
Tu peux aussi sortir le listing asm du compilo pour comparer, tu verras, y a pas photo.
2 mai 2004 à 15:31
Pi mon code je l'utilise dans une appli win32.
C'est parceque j'utilise des string ?
Enfin si ce code et mieu je voudrai bien savoir pk
PS: je suis newbe