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 :

Formatage d'une chaîne


Sujet :

C++

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    le dernier paramètre est un int donc DWORD non?

    De tout façon je n'utilise pas mon DWORD, je fais un sizeof de mon chemin. (il y avait un petite erreur dans le code)

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    Je parle du SECOND paramètre, ici.
    Edit: Ah, tu as corrigé depuis.
    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.

  3. #23
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Y a un truc que je ne comprend pas.
    Le code suivant ne fonctionne pas ?
    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
     
    SHELLEXECUTEINFO lpExecInfo;
    TCHAR chemin[]=_T("\\Temp\\test.pdf");
    	memset(&lpExecInfo, 0, sizeof(SHELLEXECUTEINFO));
     
    	lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    	lpExecInfo.lpFile = chemin;
    	lpExecInfo.lpParameters = _T("");
    	lpExecInfo.lpDirectory = _T("");
    	lpExecInfo.lpVerb = _T("open");
    	lpExecInfo.nShow = SW_SHOWNORMAL;
    	lpExecInfo.fMask = 0;
    	lpExecInfo.hwnd = 0;
    	lpExecInfo.hInstApp = 0;
     
    	ShellExecuteEx(&lpExecInfo);

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    je pense que oui 3DArchi, mais le problème c'est que je n'ai pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TCHAR chemin[]=_T("\\Temp\\test.pdf");
    Le chemin est contenu dans un CHAR[256] (enfaite c'est envoyer depuis une autre application). Donc je ne peux pas définir une variable contenant le chemin, je dois "convertir" ou rendre utilisable un char[256])"\\Temp\\test.pdf".

  5. #25
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Le problème, c'est que tu ne sais pas si TCHAR correspond à CHAR ou à WCHAR.
    Tu devrais passer par un template :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    template<typename SourceT, typename DestinationT> struct convert;
    template<> struct convert<CHAR,CHAR>{
       static bool DoIt(
        LPSTR  pszSource, 
        LPSTR pszDestination, 
        DWORD dwDestSize
        )
       {
            strncat(pszDestination,pszSource,dwDestSize-1);
    	return true;
       }
    };
     
    template<> struct convert<CHAR,WCHAR>{
       static bool DoIt(
        LPSTR  pszSource, 
        LPWSTR pszDestination, 
        DWORD dwDestSize
        )
       {
    	int iRet = MultiByteToWideChar(
    		CP_ACP,
    		0,
    		pszSource,
    		-1,
    		pszDestination,
    		dwDestSize
    		);
     
    	return ( 0 != iRet );
       }
    };
     
    //
    SHELLEXECUTEINFO lpExecInfo;
    TCHAR chemin[MAX_PATH];
    CHAR Entree[255];
     
    	convert<CHAR,TCHAR>::DoIt(Entree,chemin,MAX_PATH);
    	memset(&lpExecInfo, 0, sizeof(SHELLEXECUTEINFO)); 
    	lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    	lpExecInfo.lpFile = chemin;
    	lpExecInfo.lpParameters = _T("");
    	lpExecInfo.lpDirectory = _T("");
    	lpExecInfo.lpVerb = _T("open");
    	lpExecInfo.nShow = SW_SHOWNORMAL;
    	lpExecInfo.fMask = 0;
    	lpExecInfo.hwnd = 0;
    	lpExecInfo.hInstApp = 0;
     
    	ShellExecuteEx(&lpExecInfo);

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    J'ai tenté ceci également :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const char * szAscii="\\Temp\\test.pdf";
    wchar_t * szUnicode;
     
    int len, i;
    len = strlen(szAscii);
    for(i=0;i<len+1;i++)
        	*szUnicode++ = static_cast<wchar_t>(*szAscii++);
    Rien ne se passe, la compilation est bonne, mais le pdf ne se lance pas.

  7. #27
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Une chaine de caractères ANSI (char *) ne peut pas se transformer en chaine de caractères Unicode (wchar_t *) à l'aide d'un simple cast comme tu le fais. Il faut obligatoirement passer par une fonction de transformation. La réciproque est vraie aussi (passage de Unicode à Ansi), il faut aussi utiliser une autre fonction, pas de cast sauvage, sinon, c'est souvent le crash.

    Ceci dit, ton problème commence par le fait que tu ne sais pas le modèle que tu utilises (Unicode ou Ansi) et que tu essayes les fonctions et les paramètres un peu au hazard de ce que l'on déduit du peu d'information que tu donnes.

    Donc est ce que tu peux faire une petite synthèse :
    • Environnement de développement
    • Plateforme de développement
    • Plateforme cible (si différent de la plateforme de dev)
    • Modèle utilisé (Unicode ou non unicode)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 49
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Le problème, c'est que tu ne sais pas si TCHAR correspond à CHAR ou à WCHAR.
    Tu devrais passer par un template :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    template<typename SourceT, typename DestinationT> struct convert;
    template<> struct convert<CHAR,CHAR>{
       static bool DoIt(
        LPSTR  pszSource, 
        LPSTR pszDestination, 
        DWORD dwDestSize
        )
       {
            strncat(pszDestination,pszSource,dwDestSize-1);
    	return true;
       }
    };
     
    template<> struct convert<CHAR,WCHAR>{
       static bool DoIt(
        LPSTR  pszSource, 
        LPWSTR pszDestination, 
        DWORD dwDestSize
        )
       {
    	int iRet = MultiByteToWideChar(
    		CP_ACP,
    		0,
    		pszSource,
    		-1,
    		pszDestination,
    		dwDestSize
    		);
     
    	return ( 0 != iRet );
       }
    };
     
    //
    SHELLEXECUTEINFO lpExecInfo;
    TCHAR chemin[MAX_PATH];
    CHAR Entree[255];
     
    	convert<CHAR,TCHAR>::DoIt(Entree,chemin,MAX_PATH);
    	memset(&lpExecInfo, 0, sizeof(SHELLEXECUTEINFO)); 
    	lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    	lpExecInfo.lpFile = chemin;
    	lpExecInfo.lpParameters = _T("");
    	lpExecInfo.lpDirectory = _T("");
    	lpExecInfo.lpVerb = _T("open");
    	lpExecInfo.nShow = SW_SHOWNORMAL;
    	lpExecInfo.fMask = 0;
    	lpExecInfo.hwnd = 0;
    	lpExecInfo.hInstApp = 0;
     
    	ShellExecuteEx(&lpExecInfo);
    ça marche! 3DArchi tu es incroyable !! merci ! merci !
    Je dois pouvoir "enfin" me débrouiller maintenant.
    Merci encore pour le mal que tu t'es donné, j'espère ne plus avoir de gros problème bloquant.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 02h08
  2. Réponses: 3
    Dernier message: 28/09/2003, 11h46
  3. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 12h09
  4. Comptage de mots dans une chaîne
    Par kikinou dans le forum Pascal
    Réponses: 10
    Dernier message: 01/01/2003, 03h27
  5. Réponses: 3
    Dernier message: 09/05/2002, 02h39

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