Vous n'êtes pas identifié.
Est ce k1 pourrait le compiler et me dire si ca marche ou pas.
je sais ca prend du temps mais j'aimerai tellement savoir si ca marche oupas.
merci à la bonne ame qui fera ca.
je crois ke je ve abandonner mon prog.
Hors ligne
tu vx k'on teste juste le code ci-dessus ? ou ton prog ?
Je px tjrs essayer avec VC1.5 aussi.
Hors ligne
juste le code ci-dessus !
X-thunder a essayer mais il a le meme bug inexplicable.
Hors ligne
je vais essayer avec Digital Mars...
---- Edit :
euh le but c bien de lancer touche2.exe sans bug, non ? parce que avec digital mars aucun pb (ya juste qqs differences au niveau des noms des fonctions, et adapté a ma config):
#include <direct.h> #include <dos.h> #include <stdio.h> #include <process.h> void execute(char pathp[]){ //By 2072 char command[128]; //buffer for the command line char *args[64]; //table of arguments int i; int numberofargs =0; //no comment int a =0; int cline_size; //size of the command line cline_size=strlen(pathp); //cline_size is set if (cline_size > 128) //Error if the command line size is more than 128 return; //This, below, scan the command line to find space characters for (i=0; i <= cline_size; i++) { if (pathp[i]!=(char)32) { //if there is no space if (a==0) //if it is the first character of the arg args[numberofargs]=&command[i]; //copy the address of the first arg command[i]=pathp[i]; //copy the arg in command a++; //a is increased till a space is found } else if (a > 0 && args[numberofargs][a - 1]!=(char)32) { //if a space is found after //an argument and if the //previous character wasn't a //space command[i]=' '; //this end the argument numberofargs++; //a new argument has been found a=0; //reset the index of character of the argument } } args[numberofargs + 1]=NULL; //This is for the last argument _execv(args[0], args); //execute the progs with the argument list return; } int main() { if(_chdrive(11)) { printf("impossible de changer de lecteurn"); } if(_chdir("L:\")) { printf("impossible de changer de repertoiren"); } execute("L:\TOUCHE2.EXE"); return 0; }
PS: le programme se trouvait dans O:
Hors ligne
Tous sur Digital Mars!
PS: quelqu' un a testé VC++1.5? ça fonctionne pas chez moi, il me sort des erreurs win16...
Hors ligne
Bah ecoute je verrai ca quand je serai chez moi. mais X-thunder et Casiomax ont le meme bug que moi. Si tu di ke ca bug pas alors je ve essayer avec DigitalMars en priant très fort. Franchement si ca marche sur ma graph100, je te ferai un gros bisou ! lol je deconne ! franchement j'espère trop que ca va marcher !
Si ca fonctionne j'abandonne TC3.0fr, pourtant son aide en francais est une aide précieuse.
Non j'ai pas VC++1.5
Hors ligne
Je pense à un truc aussi, il ne faudrait pas avant de lancer le prog désiré changer le répertoire courant ?
C peut être ca le problème.
Sinon je vais tester avec VC1.5, mais je px déjà dire que pour faire fonctionner memzones c la galère. (g trjs pas réussi, ca compile mais après ca fait des erreurs dans la mémoire de notre g100, genant!)
Hors ligne
ligne de commande pour DM:
C:dmbindmc.exe CHEMIN_DU_FICHIER -ms -2 -o+all -Jm -w7 -oNOM_DE_L_EXE.exe
Ensuite DM fait un caca nerveux si on met un label en fin de fonction du genre:
void fonction(void)
{
[blabla]
end:
}
pour certaines fonx de db_lib j' ai alors mis:
void fonction(void)
{
[blabla]
end:
asm{}
}
mais ya d' autre moyen, comme toujours!
Hors ligne
VC 1.5 fait le meme caca nerveux que DM
Hors ligne
>> Je pense à un truc aussi, il ne faudrait pas avant de lancer le prog désiré changer le répertoire courant ?
c ce ke je fais avec Chdir et setdisk
Hors ligne
ENLEVEZ-MOI CE CHDIR() DE MERDE QUI NE SERT À RIEN !
Hors ligne
Bon j'ai fait de multiple test, quand je compile ce code (test.c -> TEST.EXE):
#include <stdio.h> #include <process.h> #include <string.h> void execute ( char *pathp ); void execute(char *pathp) { char command[128]; char *args[64]; int i; int numberofargs =0; int a =0; int cline_size; cline_size=strlen(pathp); if (cline_size > 127) return; for (i=0; i < cline_size; i++) { if (pathp[i]!=(char)32) { if (a==0) args[numberofargs]=&command[i]; command[i]=pathp[i]; a++; } else if (a > 0 && args[numberofargs][a - 1]!=(char)32) { command[i]=' '; numberofargs++; a=0; } } args[numberofargs + 1]=NULL; execv(args[0], args); } int main() { execute("O:\TESTarg.EXE"); return 0; }
effectivement, sous windows2000 ça marche mais pas sur la calto:
le programme TESTarg.EXE affiche son argument 0 (argv[0]), lorsque je lance TEST.EXE sous w2k, TESTarg m'affiche bien o:TESTarg.exe mais sur la calto il m'affiche N:TEST.EXE (j'ai mis TEST.EXE dans N: )... Ça explique le problème de TOUCHE.
J'ai tout essayé, rien y fait. Mais pourtant T_EXPLORER.EXE utilise cette même fonction et lui il lance n'importe quel programme sans problème. Donc à mon avis le succès de l'exécution dépent de l'organisation mémoire du programme qui exécute, T_EXPLORER.EXE est un gros programme, donc le bug de ROMDOS ne dois pas foutre la merde de la même façon.
Donc essaye de changer l'organisation de ton code. qui sait...
(en tout cas ça ne sert à rien de changer de répertoire, TOUCHE s'en branle du répertoire courant).
Hors ligne
" J'ai tout essayé, rien y fait. "
bizarrement ca ma fait vachement plaisir ! je ne rame pas pour rien.
sinon merci a vous tous quand meme.
j'allucine quand meme que l'on fasse des explo depuis 3 ans et qu'on est pas vu ca. bref... voila un bug interessant
Hors ligne
STOP pas d' abandon.
Déjà ya 3 solutions pour contrecarrer ce problème:
La simple: on se met d' accord pour écrire quelque part la lettre du disque
La pas-si-facile-que-ça: lire directement les fichiers dans la flash, mais faut avoir une bonne connaissance de la flash et du format romdos.
La difficile: refaire la routine d' execution, jusqu' au execv, mais faut savoir comment faire (peut ètre que whyp pourra nous donner des infos la dessus s' il est la)!
Je pense plutot à la 1, mais faut trouver un endroit dans la mémoire sans danger!
je pense a la mémoire video... par exemple l' adresse 1A60:0 n' est pas utilisée en tant d' execution!
Hors ligne