Migration C++ Builder 6 versus C++ Builder 2009 & AnsiString
Bonjour
j'ai lu les diff�rentes contributions sur ce sujet sans toujours faire les m�mes constatations que mes pr�d�cesseurs. Je rapporte ici un cas surprenant de divergences de comportement du m�me code entre deux projets diff�rents que j�appellerai ANCIEN et NOUVEAU. la raison est que ANCIEN est un projet existant d�velopp� sous C++6 tandis que nouveau a �t� cr�� sous C++9. Les deux projets sont cependant execut�s sous C++9. L'ANCIEN a donc �t� converti automatiquement par le RAD.
Je pr�cise que j'ai bien s�r essay� de faire varier la fameuse option "Mappage du _TCHAR" sans que cela fasse varier les observations suivantes :
Prenons le code inoffensif et fonctionnel sous C++ Builder 6
Code:
1 2 3 4
| MessageBox(Application->Handle,
(Format("%s ",ARRAYOFCONST(("Toto")))).c_str(),
"Erreur",
MB_OK | MB_ICONERROR); |
il ne se compile pas sous C++Builder 9 � cause du c_str(). Je le remplace donc par :
Code:
1 2 3 4
| MessageBox(Application->Handle,
(Format("%s ",ARRAYOFCONST(("Toto")))).t_str(),
"Erreur",
MB_OK | MB_ICONERROR); |
La compilation passe ... mais � l�ex�cution :
le projet NOUVEAU affiche le projet ANCIEN affiche Je pr�sume que l'ouverture/conversion d'un projet C++6 sous C++9 entra�ne quelques choix d'options qui expliqueraient ce comportement. N�anmoins je ne vois pas lesquelles ?
Apr�s quelques recherches sur le forum je tente
Code:
1 2 3 4
| MessageBox(Application->Handle,
AnsiString().Format("%s ",ARRAYOFCONST(("Toto"))).c_str(),
"Erreur",
MB_OK | MB_ICONERROR); |
qui fonctionne depuis les deux projets.
Je pense � la lecture de la doc) que la fonction Format est surcharg�e, et que par cons�quent ce n'est pas le m�me code qui est compil� dans les deux projets. Mais comment savoir quelle d�clinaison est employ�e ?
D'ordinaire la discrimination de fonctions surcharg�es se fait par les param�tres d'appel. Mais ici ce sont les m�mes. Je pense aussi � l'inclusion automatique si elle se fait sur les composants visuels, elle n'a pas lieu sur de simples fonctions m�me de classe... ?
NB : j'ai r��dit� ce message apr�s relecture car j'ai constat� apr�s une nuit de sommeil qu'il �tait incompr�hensible en l'�tat. D�sol� pour ceux qui l'ont lu avant la mise � jour...