IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

passer arguments avec shellexecute


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 9
    Par défaut passer arguments avec shellexecute
    je veux passer plusieurs arguments d'un programme a un autre executable , le probleme est que seuleement la premier argument est reconnu... les autres NULL...

    programme effectuant des traitements sur des arguments

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char **argv)
    {
     
        FILE * f;
        if(argc>1){
     
     
            f = fopen(strcat(argv[1],".txt"), "a");
     
            if (f != NULL)
            {
                printf("%s",argv[2]);
               fprintf(f, "%s^%s\n",argv[2],argv[3]);
                printf("qsdfs");
            }
            fclose(f);
            }
        else
            perror(argv[1]);
    getch();
        return 0;
    }
    programme appelant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include <windows.h>
    #include <shellapi.h>
     
     
    int main ()
    {
    char   **tab;
     
     
     
    char **tab;
    tab=(char**)malloc(3*sizeof(char*));
    tab[0]=(char*)malloc(10*sizeof(char));
    tab[1]=(char*)malloc(10*sizeof(char));
    tab[2]=(char*)malloc(sizeof(char));
     
    strcpy(tab[0],"films");
    strcpy(tab[1],"the titanic");
    strcpy(tab[2],"1h 45min");
     
     
    ShellExecute(NULL,"open","insert.exe",tab,NULL,SW_SHOWDEFAULT);
     
      return 0;
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 839
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chan_hic Voir le message
    programme appelant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include <windows.h>
    #include <shellapi.h>
     
     
    int main ()
    {
    char   **tab;
     
     
     
    char **tab;
    tab=(char**)malloc(3*sizeof(char*));
    tab[0]=(char*)malloc(10*sizeof(char));
    tab[1]=(char*)malloc(10*sizeof(char));
    tab[2]=(char*)malloc(sizeof(char));
     
    strcpy(tab[0],"films");
    strcpy(tab[1],"the titanic");
    strcpy(tab[2],"1h 45min");
     
     
    ShellExecute(NULL,"open","insert.exe",tab,NULL,SW_SHOWDEFAULT);
     
      return 0;
    }
    Je connais pas la fonction ShellExecute mais la fonction execv() d'Unix impose de passer un tableau terminé par NULL (ce qui est normal quand on y réfléchit 2 secondes, car comment sinon savoir où se termine le tableau ???)

    Donc ça pourrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char **tab;
    tab=(char**)malloc(4*sizeof(char*));
    tab[0]=(char*)malloc(10*sizeof(char));
    tab[1]=(char*)malloc(10*sizeof(char));
    tab[2]=(char*)malloc(10 * sizeof(char));
     
    strcpy(tab[0],"films");
    strcpy(tab[1],"the titanic");
    strcpy(tab[2],"1h 45min");
    tab[3]=NULL;
    Autre chose: les malloc sont ici totalement inutiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char *tab[4]={
        "films",
        "the titanic",
        "1h 45min",
        NULL
    };
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Tu alloues 10 char mais la chaîne "the titanic" en fait plus, fais attention à ça.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Comme l'a précisé jeroman, MSDN a toujours raison à ce niveau... Tes arguments doivent être passés sous forme de chaîne de caractères, et non pas sous forme de vecteur de chaînes.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    lpParameters
    [in] If lpFile specifies an executable file, this parameter is a pointer to a null-terminated string that specifies the parameters to be passed to the application. The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.

Discussions similaires

  1. Passer des argument avec le manifeste java
    Par hotward dans le forum Général Java
    Réponses: 3
    Dernier message: 09/09/2009, 06h23
  2. passer un argument avec
    Par adel25 dans le forum Langage
    Réponses: 6
    Dernier message: 06/09/2009, 13h30
  3. passer des arguments avec Runtime.getRuntime().exec;
    Par firgon dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 07/11/2008, 07h16
  4. [Batch] passer un argument avec la commande Start
    Par metatron dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/08/2008, 21h59
  5. [Configuration] Impossible de passer des arguments avec require
    Par black is beautiful dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 06/10/2007, 21h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo