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 :

Migration C++ Builder 6 vers C++ Builder 2009


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par d�faut Migration C++ Builder 6 vers C++ Builder 2009
    Bonjour

    je migre un grosse application (322 sources 700.000 lignes sans les Packages) de C++Builder 6 vers 2010. Apr�s avoir corrig� diverses erreurs de comptabilit� qui bloquait la compilation j'ex�cute le code et comme un bogue survient je pose un trap dans le code sur un instruction innocente :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    AnsiString s = Edit1->Text
    ou Edit1 est un TEdit

    Je m'aper�ois que s est vide tandis que Edit1->Text ne l'est pas. Je consulte (en debug) Edit1->Text et j'obtiens le message

    E2451 Symbole '_fastcall Controls::TControl::GetText()' non d�fini
    �tonn� je cr�e un nouveau projet dans lequel je fais la manipe suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    AnsiString s=Edit1->Text;
    Button1->Caption=s;
    Je constate cette fois que Edit1->Text est bien lisible mais chose �trange, bien que la valeur de Edit1->Text soit transf�r�e dans Button1->Caption, "s" est vide ! J'essaie s.Length() et l� j'obtiens

    E2451 Symbole '_fastcall System::AnsiStringBase::Length()' non d�fini
    J'en d�duis que mon projet a �t� converti avec des options qui agissent sur les types de chaines mais je n'ai pas trouv� d'explication claire dans la doc en ligne.

  2. #2
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    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 089
    Par d�faut
    Tu devrais avoir un warning sur cette ligne AnsiString s = Edit1->Text; comme conversion implicite avec perte : W1058: Transtypage de cha�ne implicite avec perte de donn�es potentielle de '%s' en '%s' (Delphi)

    En fait cette ligne est �quivalente � AnsiString s = AnsiString(Edit1->Text);.
    Cela appelle implicitement le constructeur AnsiString(UnicodeString),
    car l'op�rateur = n'existe que si la forme AnsiString operator =(AnsiString).

    N'utilise pas le d�bogueur pour cela, cela ne fonctionnait d�j� pas avant !
    Fait des ShowMessage ou OutputDebugString pour afficher tes tests !

    Ensuite, si tu as migr� le projet, par d�faut il m�lange ANSI pour les API Windows et UnicodeString pour la VCL
    Si tu as recr�� un projet, il est passer totalement en Unicode : Mappage _TCHAR

    Cela fait au moins 3 ans que l'on r�p�te inlassablement l'enjeu et l'�ventuelle complexit� de la migration : Comment passer en douceur de D5 � XE2 ?

    Il y a toute une histoire de CodePage en fait ta chaine AnsiString contient une copie la valeur brute de l'UnicodeString avec le CodePage 65001 (sous Windows) converti par LStrFromUStr et si l'on remonte la chaine d'appel et de directive on abouti � WideCharToMultiByte

    Possible que le d�boggueur soit perdu, �a lui arrive souvent !
    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�

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par d�faut
    Merci

    Au vu de toutes ces infos utiles j'ai investigu� plus avant et j'ai constat� que :

    Un projet migr� (par ouverture du projet C++6) est automatiquement opt�
    "Mappage de _TCHar en : char"
    Un projet cr�� de toute pi�ce : c'est pareil.

    Je pr�cise qu'il s'agit du C++ 2009 du RAD Studio 2009, peut �tre diff�rent de XE2.

    Mais ce que je n'avais pas vu c'est que le d�bogueur est d�sormais plus subtil et offre plusieurs niveaux de d�tails comme suit :



    J'avais en fait mal localis� mon probl�me qui se situe au niveau d'un TDataset->Open() qui produit une division par z�ro. Mais comme je pensais que la chaine SelectSQL �tait mal construite cela avait �gar� mes recherches. Je vous tiens au courant.

  4. #4
    Membre �clair�

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502

Discussions similaires

  1. [IDE] Migration d'un projet vers C++ Builder XE6
    Par Irisael dans le forum C++Builder
    R�ponses: 1
    Dernier message: 01/09/2014, 15h17
  2. Migration C++ Builder 6 versus C++ Builder 2009 & AnsiString
    Par frantzgac dans le forum C++Builder
    R�ponses: 1
    Dernier message: 06/08/2012, 11h10
  3. R�ponses: 2
    Dernier message: 30/07/2009, 08h14
  4. Transformer un code vers C++ Builder
    Par matnes dans le forum MATLAB
    R�ponses: 2
    Dernier message: 24/01/2008, 13h30
  5. Convertir un programme Visual c++ vers C++ builder
    Par Skarlix dans le forum C++Builder
    R�ponses: 11
    Dernier message: 16/10/2004, 22h51

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