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 :

Conversion Variant / AnsiString


Sujet :

C++Builder

  1. #1
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut Conversion Variant / AnsiString
    Bonjour,

    lors d'un passage Builder 6 vers Builder 2010, je me suis retrouvé avec une erreur de compilation dans un code de DLL que j'ai du mal à interpréter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Vérification des dépendances de projet...
     
    Compilation de DLL_PEthernet.cbproj (configuration Débogage)
    [BCC32 Avertissement] unit2.cpp(20): W8057 Le paramètre 'Sender' n'est jamais utilisé
    [BCC32 Erreur] Unit1.cpp(93): E2015 Ambiguïté entre '_fastcall System::AnsiStringT<0>::AnsiStringT(const System::AnsiStringT<0> &) at c:\program files\embarcadero\rad studio\7.0\include\vcl\dstring.h:359' et '_fastcall System::AnsiStringT<0>::AnsiStringT(const wchar_t *,int) at c:\program files\embarcadero\rad studio\7.0\include\vcl\dstring.h:393'
    [BCC32 Erreur] Unit1.cpp(93): E2031 Impossible de transtyper de 'Variant' en 'AnsiString'
    Echec
    Temps écoulé :  00:00:00.1
    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
     
    Variant _stdcall Send(Variant texte)
     
    {
      AnsiString txt;
      txt = (AnsiString) texte;  // erreur en borland builder 2010, pas en borland builder 6
     
      char buftx[12];
      sprintf(buftx,txt.c_str()); 
      TcpClient1->SendBuf(buftx,12,0);
     
      // RX
      char bufrx[50]="\000000000000000000000000000000000000000000000000";
      TcpClient1->ReceiveBuf(bufrx,50,0);
      txt = bufrx;
      return ( (Variant) txt);
    }
    Est-ce que quelqu'un a une idée sur comment corriger cette erreur svp ?


    De manière générale je galère depuis que je suis passé au 2010 sur les fonctions qui utilisent du texte, depuis la simple Application->MessageBox qui n'accepte plus du texte sans le L devant, jusqu'aux conversions entre UnicodeString AnsiString WideString bref, ça commence sérieusement à me gaver de passer du temps pour des trucs sans intérêts comme ça.

    Question : Qu'utilisez-vous comme chaines de caractère et pour quelles raisons ?
    plutot des string, des CString, des UnicodeString, des WideString, des AnsiString, autre ?

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello,

    Tu peux essayer avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString txt = VarToStr(texte);
    Question : Qu'utilisez-vous comme chaines de caractère et pour quelles raisons ?
    plutot des string, des CString, des UnicodeString, des WideString, des AnsiString, autre ?
    Des String partout où c'est possible.
    On a très peu de chaînes en dur dans le code (quasi tout en ressource), donc le fait de devoir préfixer par L n'est pas trop gênant.
    Pour les appels à des fonctions qui doivent continuer à prendre des char* (genre dll), ça fait utiliser des écritures du genre AnsiString(xx).c_str() (du fait du mappage de _TCHAR vers wchar_t - si mappé vers char, .t_str() aurait suffit). C'est parfois lourd, mais bon...

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    ou plus simplement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString txt = texte;
    comme indiqué ici

  4. #4
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Ca marche !!

    Merci beaucoup pour les précisions sur les chaines de caractère.

    VarToStr fonctionne bien, par contre le fait que AnsiString txt = texte; fonctionne et non AnsiString txt = (AnsiString) texte; c'est tout de même étrange O_o

    J'avais tout essayé sauf le plus simple en fait ^^'

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

Discussions similaires

  1. Conversion Ansistring -> Variante
    Par jojolastar27 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2009, 14h47
  2. conversion variant en CString
    Par ep31 dans le forum MFC
    Réponses: 3
    Dernier message: 22/11/2005, 13h32
  3. Champ Date à '01/01/0001' -> Pb conversion de variant !!!
    Par AnnSo dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/06/2004, 16h54
  4. conversion : VARIANT FAR* URL vers CString
    Par kam dans le forum MFC
    Réponses: 2
    Dernier message: 29/03/2004, 13h32
  5. [FloatToStr] Conversion d'un nombre en AnsiString
    Par bebeours dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/09/2003, 00h21

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