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 :

Utiliser les arguments de wmain


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Par défaut Utiliser les arguments de wmain
    Bonjour,

    J'essaie d'utiliser les arguments de wmain.
    Par contre, je n'arrive pas à concaténer les arguments avec des chaines de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #define SERVICE_NAME             L"MonService" 
    int wmain(int argc, wchar_t *argv[]) 
        { 
        wchar_t * myServiceName = SERVICE_NAME  + L"-" + (argv[1] + 1);
        printf("myServiceName : %s", myServiceName);
        }
    Comment feriez-vous ?
    Merci d'avance

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    l'opérateur + ne concatene pas des char* (ou des wchar_t*).
    Comme il s'agit de pointeurs, il ajoute les adresses correspondantes.

    Il faut passer par une std::wstring (qui est une std::basic_string<wchar_t>)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Par défaut
    Super Merci.
    J'aurais besoin de convertir ma wstring en PWSTR. Y a t-il une méthode ?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		std::wstring myServiceName = wstring(SERVICE_NAME)+ L"_" + wstring(argv[2] + 1); 
     
                    InstallService( 
     		    (PWSTR)myServiceName,        // Name of the service
                        SERVICE_DISPLAY_NAME,       // Name to display 
                        SERVICE_START_TYPE,           // Service start type 
                        SERVICE_DEPENDENCIES,      // Dependencies 
                        SERVICE_ACCOUNT,               // Service running account 
                        SERVICE_PASSWORD             // Password of the account 
                        );

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je ne connais pas l'API, mais wstring::c_str() pourrait être la réponse.
    A vérifier avec les problèmes de pointeurs non constants. c_str() ne peut ni ne doit être utilisé pour modifier la chaine

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Par défaut
    Merci.
    J'y suis arrivé par ce biais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const_cast<PWSTR>(myServiceName.c_str()),				// Name of service

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est précisément ce que j'espérais que tu ne ferais pas.

    Pourquoi le pointeur est-il demandé sur une chaine modifiable?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Par défaut
    C'est une procédure que j'ai trouvé sur le site de Mircosoft qui permet d'installer un service : https://code.msdn.microsoft.com/CppW...rvice-74bb412c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void InstallService(PWSTR pszServiceName, 
                        PWSTR pszDisplayName, 
                        DWORD dwStartType,
                        PWSTR pszDependencies, 
                        PWSTR pszAccount, 
                        PWSTR pszPassword)
    Effectivement, la procédure ne modifie pas le nom du service.

    En quoi Est-ce problématique ma facon de faire ?

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    parce que tu violes le système de type, permettant (si la procédure le souhaite, et tu n'en est pas maitre) de modifier la chaine pointée.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 84
    Par défaut
    OK Merci

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 399
    Par défaut
    Disons qu'avant C++11, il n'y a aucune méthode standard et garantie portable pour avoir un pointeur non-const sur les caractères d'une std::string ou std::wstring; ma méthode dans ce cas est de recopier son contenu dans un std::vector de caractères.

    Depuis C++11, &maChaine[0] est censé marcher, car le standard a rajouté l'obligation que la chaîne soit stockée de manière continue. Par contre, je ne sais plus si la présence d'un caractère nul terminal a été également exigée, ou s'il faut que tu le concatènes toi-même avec push_back(L'\0') d'abord.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 27
    Dernier message: 14/12/2006, 20h49
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 16h57
  3. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 20h47
  4. Merci d'utiliser les TAG
    Par Cian dans le forum Etudes
    Réponses: 0
    Dernier message: 07/08/2003, 18h46
  5. Utiliser les frames
    Par laury dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/05/2003, 11h14

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