Bonjour,

Pour que mon code soit indépendant de l'encodage des caractères j'ai fait un simple define :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
#ifdef EMV_UNICODE
#define EMV_T( x ) L ## x
#else
#define EMV_T( x ) x
#endif
Et pour faire mes assertions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
#define EMV_ASSERT( bExpression, ... ) \
eMV::EmvAssert( EMV_T( #bExpression ), EMV_FILE, EMV_LINE, EMV_FUNCTION, EMV_T( ##__VA_ARGS__ ), EMV_T( "" ) ) )
Et en utilisation ça donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
EMV_ASSERT( uVar >= 0, "Valeur négative... Pas bien !" ); // OK
EMV_ASSERT( bTest ); // Error C2065: 'L' : undeclared identifier
Ce qui est normal puisque le paramètre 5 de mon eMV::EmvAssert c'est EMV_T( ##__VA_ARGS__ ) donc ça donne L.

La solution simple serait de remplacer tous mes EMV_ASSERT( condition ) par EMV_ASSERT( condition, "" ). Mais c'est assez lourd et ça demande beaucoup de changement dans mon code... J'ai essayé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#define EMV_T( x ) L ## "" ## L ## x
Mais ça ne fonctionne évidement pas... Puisque pour un EMV_ASSERT sans message, ça donne L""L...

Donc j'aimerais avoir votre avis pour savoir comment vous auriez résolu ce problème sans reparcourir tout le code en ajoutant des "" useless...

Merci