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
il ne se compile pas sous C++Builder 9 � cause du c_str(). Je le remplace donc par :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 MessageBox(Application->Handle, (Format("%s ",ARRAYOFCONST(("Toto")))).c_str(), "Erreur", MB_OK | MB_ICONERROR);
La compilation passe ... mais � l�ex�cution :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 MessageBox(Application->Handle, (Format("%s ",ARRAYOFCONST(("Toto")))).t_str(), "Erreur", MB_OK | MB_ICONERROR);
le projet NOUVEAU affichele projet ANCIEN afficheTotoJe 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
qui fonctionne depuis les deux projets.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 MessageBox(Application->Handle, AnsiString().Format("%s ",ARRAYOFCONST(("Toto"))).c_str(), "Erreur", MB_OK | MB_ICONERROR);
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...
Partager