2009-10-15 9 views

ответ

5

Ваша функция называется «на строку», и это действительно проще (и более универсально) преобразовать в строку, чем преобразовать «в LPCWSTR»:

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

Если у вас есть API, который нуждается в LPCWSTR, вы можете использовать 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

Это прекрасно работает. Большое спасибо. –

0

Эта функция не работает, потому что wnum.c_str() указывает на память, которая освобождается при WNum разрушается, когда функция возвращает.

Вы должны взять копию строки, прежде чем вернуть его, т.е.

return wcsdup(wnum.c_str()); 

, а затем, когда вы закончите с использованием результата вы должны освободить его, т.е.

LPCWSTR str = ToString(123); 
// use it 
free(str); 
Смежные вопросы