2009-10-15 9 views

Répondre

5

votre fonction est appelée « à la chaîne », et il est en effet plus facile (et plus universel) pour convertir en une chaîne de convertir « en LPCWSTR »:

template< typename OStreamable > 
std::wstring to_string(const OStreamable& obj) 
{ 
    std::wostringstream woss; 
    woss << obj; 
    if(!woss) throw "dammit!"; 
    return woss.str(); 
} 

Si vous avez une API qui a besoin d'un LPCWSTR, vous pouvez utiliser std::wstring::c_str():

void c_api_func(LPCWSTR); 

void f(long l) 
{ 
    const std::wstring& str = to_string(l); 
    c_api_func(str.c_str()); 
    // or 
    c_api_func(to_string(l).c_str()); 
} 
+0

Il fonctionne très bien. Merci beaucoup. –

0

Cette fonction ne fonctionne pas parce que wnum.c_str() points mémoire qui est libérée lorsque wnum est détruit lorsque la fonction retourne.

Vous devez prendre une copie de la chaîne avant de le retourner, soit

return wcsdup(wnum.c_str()); 

et puis quand vous avez fini d'utiliser le résultat que vous devez libérer, soit

LPCWSTR str = ToString(123); 
// use it 
free(str);