2010-06-08 5 views
2

Récemment, je fait une utilitaires fonctionnent comme:Tout effet secondaire de ne pas utiliser USES_CONVERSION

// T2CA 
#include "ATLCONV.H" 

std::string Utils::CString2String(const CString& cString) 
{ 
#if _MSC_VER > 1200 
    // Convert a TCHAR string to a LPCSTR 
    // construct a std::string using the LPCSTR input 
    CT2CA tmp(cString); 
    std::string strStd (tmp); 
#else 
    // Deprecated in VC2008. 
    // construct a std::string using the LPCSTR input 

    std::string strStd (T2CA (cString)); 
#endif 

    return strStd; 
} 

Je l'ai fait plusieurs tests simples et il semble fonctionner très bien. Cependant, quand je recherche sur le Web, je peux voir que la plupart des usages de T2CA dans VC6 ont un appel précédent de

USES_CONVERSION; 

Y at-il quelque chose que j'avais manqué? Dois-je appeler ma fonction par:

#else 
    // Deprecated in VC2008. 
    // construct a std::string using the LPCSTR input 
    USES_CONVERSION; 
    std::string strStd (T2CA (cString)); 
#endif 

Répondre

2

Dans ATL 7.0 USES_CONVERSION n'est plus nécessaire. Avant cela, vous deviez spécifier la macro USES_CONVERSION sinon vous auriez des erreurs de compilation.

+0

Mais comment se fait-il que je n'ai pas eu d'erreur de compilation lorsque j'utilise T2CA? Prendre note que T2CA est appelé avec le bloc de code VC6 (#if _MSC_VER <= 1200) –

+0

Le code ci-dessus peut être compilé à la fois sous VC2008 et VC6. –

+0

@Yan: Je ne suis pas sûr mais je me souviens avant de faire du développement et si je ne l'avais pas mis, j'obtiendrais des erreurs de compilation. Et je sais que ce n'est plus nécessaire. Je pense qu'il est sûr de dire que vous pouvez utiliser le code en toute sécurité sans cela si cela se compile bien. –

Questions connexes