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++Builder Discussion :

CB2010: erreur SaveDialog1->FileName.c_str()


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut CB2010: erreur SaveDialog1->FileName.c_str()
    Bonjour,
    je passe un projet de CBuilder2006 en 2010, voici une erreur
    Erreur : E2034 Impossible de convertir 'wchar_t *' en 'const char *'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILE* askDATFile = fopen(SaveDialog1->FileName.c_str(),"r");
    Merci par avance de votre aide

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    utilise w_str() ou fopenA (si ça existe)
    Bon Courage pour la Migration UniCode !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Merci.
    J'ai essayé w_str(), cela ne marche pas.

    En cherchant un peu, il parait que AnsiString n'est plus compatible dans CBD2010!!!

    Voici quelques détails pour la migration d'une de mes appli vers C++Builder2010 avec réussite:

    1. Remplacer tous AnsiString par String
    2. Remplacer tous .c_str() par .t_str() car .c_str() n’est pas supporté par UnicoleString
    3. Pour la fonction pow(): pow(3, 2) doit être pow(3., 2) dans CBD2010

    Une question: quelle est la différence entre AnsiString et String!

    Merci

  4. #4
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Il y a encore un problème:
    chaque fois que j'utilise MyString.t_str(), le contenu de MyString est modifié!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char p[512];
    String MyString = "Test";
    strcpy(p, MyString.t_str());

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Citation Envoyé par Xavier Voir le message
    Une question: quelle est la différence entre AnsiString et String!
    Faudrait se renseigner peut-être ! non ?
    Cela fait au moins 3 ans que l'on en parle, les Code Way Tour sont là pour informer les développeurs, Thierry Laborde a bien insisté sur l'importance de la migration ANSI vers UniCode, l'impact sur les libs externes et la supposition eronnée de la taille d'un caractère vaut 1 (cela peut être 2 en UniCodeString ou 1 à 4 en UTF8String)

    Depuis RAD 2009, le type String est devenu un alias pour UnicodeString, c'est probablement la modification majeur du RAD Studio de ces dernières années !
    Voir aussi RawByteString

    Je n'ai pas 2010 sur mon poste, je n'ai que 2007, mon XE est sur un autre ordi ... donc je n'ai pas t_str()

    Attention à ne pas mélanger des fonctions ANSI et UniCode !
    attention char = ANSI, Char = UniCode (faut vérifier quelques options et directives aussi)
    typiquement "strcpy" va être en "char" alors que StrCopy en "Char", note la subtilité sizeof(char) != sizeof(Char) selon les directives de compilation, il me semble ?!
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Merci pour ces détails. Franchement, j'ai créé quelques applis sans vraiment connaître l'informatique.
    Une petite question : je bascule mes applis en CBD2010 pour une bonne fois, je dois convertir les AnsiString en UnicodeString ou en String ?
    Merci

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    La bascule est toujours problématique !
    Disons que le type String aura l'avantage d'être compatible avec la VCL !

    2006 : String = AnsiString
    2010 : String = UnicodeString

    String n'était qu'un alias, fort pratique d'ailleurs, si tu as massivement utilisé la AnsiString explicitement, il est évident que tu vas avoir des conflits !

    fait bien attention aussi au fonctions que tu utilises !

    pour le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char p[512];
    String MyString = "Test";
    strcpy(p, MyString.t_str());
    char => 1 octet
    MyString "Test" => 10 octets, T 0 e 0 s 0 t 0 0 0
    finalement strcpy va copier juste T puisqu'il Ansi et le second octet de l'UniCode pour lui est un zéro terminal (ce qui est faux bien sur !)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ODS] Erreur dans une instruction filename
    Par mohamed_ dans le forum ODS et reporting
    Réponses: 5
    Dernier message: 27/09/2011, 18h03
  2. erreur imread:(strfind(filename, '://'))
    Par matlabeginer dans le forum Images
    Réponses: 3
    Dernier message: 25/04/2008, 11h25
  3. Relation Savedialog1.Filename entre 2 form?
    Par qhardy dans le forum Débuter
    Réponses: 7
    Dernier message: 26/02/2008, 16h22
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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