C : prob tout bête...g même un peu honte, ms bon...

C : prob tout bête...g même un peu honte, ms bon... - Programmation

Marsh Posté le 12-07-2001 à 10:54:47    

En fait, voila, en prog ms-dos, avec un main (int argc, char argv[]) je sais utiliser les arguments de la ligne de commande, mais avec le winMain, ça change tout, on fait comment ?

Reply

Marsh Posté le 12-07-2001 à 10:54:47   

Reply

Marsh Posté le 12-07-2001 à 10:57:20    

dans le winmain, g vu, y a un pointeur vers la ligne de commande, mais après, pour récupérer indépendemment les arguments séparés par des espaces, y a qd même pas besoin de faire un algo soit même pour ça; j'peux pas croire que c plus chiant que sous dos !??

Reply

Marsh Posté le 12-07-2001 à 11:48:51    

hé !?

Reply

Marsh Posté le 12-07-2001 à 13:35:18    

Dans int PASCAL WinMain(HINSTANCE hInstance,      
     HINSTANCE hPrevInstance,  
     LPSTR lpCmdLine,          
     int nCmdShow)            
on retrouve dans lpCmdLine la chaîne des paramètres de la ligne de commande (analogue à COMMAND$ sous QuickBasic).
 
Il faut chercher les espaces et prendre ce qu'il y a entre chaque zone.
 
Ca doit pouvoir s'écrire relativement facilement en passant en revue tous les caractères un par un. Je n'utilise lpCmdLine que pour récupérer le nom de fichier (association à mon .exe) donc j'ai rien sous la main (une manip attend au labo).

Reply

Marsh Posté le 12-07-2001 à 14:04:11    

ok, Merci, en fait j'avais trouvé...
Mais pour ton cas, c bizare, parce que, justement, dans lpCmdLine y a pas le nom du fichier...

Reply

Marsh Posté le 12-07-2001 à 14:32:20    

Il n'y a pas le nom du fichier exe. Je me suis mal exprimé.
 
Je voulais dire que si on associe au niveau explorateur les fichiers .SP avec toto.exe, quand on double-clique sur un fichier .SP, il va lancer TOTO avec la "ligne de commande" TOTO fichier.SP, et on récupère fichier.sp dans lpCmdLine. On n'a pas, dans mon cas, à découper en tranches d'options. Sous DOS, les tranches étaient déja faites.

Reply

Marsh Posté le 12-07-2001 à 14:36:28    

ha, ok !
C bizare, on a régressé de ce côté la...g pas envie de trancher moi, vu qu'y faut que j'économise les lignes de code (voir autre topic ...)

Reply

Marsh Posté le 12-07-2001 à 15:40:57    

met l'option "optimize size of code" au lieu "optimize speed code" ;)
ben on a pas regresse
là, argc argv est dédui par le compilo de la ligne de commande => c'est lui qui te fait le boulot : il utilise le meme algo ...
et puis c'est vraiment pas dur, avec la fonction strchr qui te cherche l'occurence d'un caractere


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-07-2001 à 16:04:47    

...ms les différent arguments sont plus dans un tableaux, mais à la suite dans un chaine, comme ça, à la barbare...bon, c vrai que c pas très dur de revenir au même niveau qu'avant en cherchant les espaces, ms qd même !

Reply

Marsh Posté le 12-07-2001 à 16:25:07    

J'ai dû, sous Windows 3.1/95, me réécrire une API qui permet de savoir si un rectangle est dans un autre, car si on prend un des rectangles de droite à gauche, l'API naturelle ne trouve pas.
 
C'est sur qu'une fonction "toute faite" est plus pratique.
 
Je ne me suis pas encore mis à la prog Linux, mais je pense qu'il va falloir que j'aménage un peu mon code pour faire tourner mes prog qui utilisent les "super" API Windows. Il va falloir sans doute réécrire certaines choses, bouhhh.

Reply

Marsh Posté le 12-07-2001 à 16:25:07   

Reply

Marsh Posté le 12-07-2001 à 16:40:05    

ben tu te le bricole le tableaux !
 
char * argv[10]; /* 10 pour pas se faire chier et pour faire court */
int argc=0;
char * ptr;
 
ptr=lpCmdLine;
 
while(argc<10)
{
    argv[argc++]=ptr;
 
    if(ptr=strchr(ptr,' ')!=NULL)
        ptr[0]=0;
    else
        break;
}
 
if faut savoir que strchr renvoit l'adresse du premier caractere trouve dans la chaine, NULL sinon (il me semble que c'est ca)
 
heu de memoire c'est un truc comme ca (si on a le de modifier lpCmdLine)
bon la on est limite a 10 parametres, mais c'est pour l'exemple a vous de faire mieux
 
me gueulez pas dessus si y'a une erreur, ca fait longtemps ke j'ai ecrit ca :D


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-07-2001 à 16:42:58    

Ouais, merci, ms en fait ça, c bon, mon vrai pb c plutot les autres topic (enfin, l'autre topic, maintenant, un des 2 pb est résolu aussi...allez, ça s'dénoue...grave à vous bien sûr !)

Reply

Sujets relatifs:

Leave a Replay

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