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

Windows Discussion :

Problème de débutant


Sujet :

Windows

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut Problème de débutant
    Salut à tous,

    Quand je transmet une constante à une structure SHFILEOPSTRUCT, la copie du fichier réussit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    shfos.pFrom =L"ressources\\biplan.cli";
    Par contre quand je lui transmet une wstring.c_str() Ca échoue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    wstring sFrom(L"ressources\\biplan.cli");
    shfos.pFrom =sFrom.c_str();//echec de la copie
    Y-a-t-il une différence entre wstring.c_str() et const wchar_t *
    Merci à tous
    Alain

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    La seule différence potentielle que je vois, c'est la durée de vie: le pointeur retourné par c_str() peut être invalidé dès la prochaine manipulation de la chaîne (et naturellement, est invalide dès que la chaîne est détruite).

    Un pointeur vers une chaîne littérale, quant à lui, est toujours valide du début à la fin du processus (enfin, sauf si tu joues un peu trop avec LoadLibrary() et FreeLibrary()).
    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. #3
    Membre chevronné Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Par défaut
    Plus exactement, la méthode c_str renvoie un pointeur vers un buffer interne qui est réutilisé à chaque invocation.

    Pour répondre la question posée : OUI il y a une différence (même plusieurs) entre wstring.c_str() et const wchar_t * : le second est un pointeur vers une chaîne (au sens tableau de wchar) non modifiable alors que le premier est un appel de fonction qui retourne un pointeur vers un buffer interne.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 98
    Par défaut
    Salut,
    Merci beaucoup pour ta réponse.
    Le paramètre pFrom de la structure SHFILEOPSTRUCT prend un LPCWSTR, c-à-d un pointeur vers une chaîne au sens tableau de wchar, est-ce que je me trompe?
    Quelle est la nature du buffer interne pointé par wstring.c_str() par rapport à un LPCWSTR ?
    C'est sans doute cette différence qui fait que ça échoue.
    Mais j'ai besoin d'une wstring pour constituer facilement mes chemins.
    Comment puis-je transformer le pointeur sur un buffer interne que renvoie wstring.c_str() en un LPCWSTR.
    J'ai essayé d'incrémenter tous les éléments d'un LPCWSTR par les éléments de ma wstring dans une boucle (maWstring[i]), mais ça n'a pas marché.

    Comment faire?

    Alain

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Comme je te l'ai dit, le problème est un problème de durée de vie.
    Tu dois montrer plus de code : Je dirais, de l'instanciation de ta wstring à l'utilisation de SHFileOperation(), voire jusqu'à la fin de la fonction...
    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. requete, problème de débutant
    Par focus dans le forum Access
    Réponses: 4
    Dernier message: 16/02/2006, 05h51
  2. Problème de débutant dans une requête
    Par decour dans le forum Access
    Réponses: 7
    Dernier message: 14/10/2005, 14h17
  3. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22
  4. Réponses: 3
    Dernier message: 24/09/2005, 09h34
  5. [DB2] problèmes de débutant
    Par rémi_tounul dans le forum DB2
    Réponses: 4
    Dernier message: 21/04/2005, 17h08

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