2009-10-15 78 views
1

如何將C++中的long轉換爲LPCWSTR?我需要的功能類似於此:如何轉換長LPCWSTR?

LPCWSTR ToString(long num) { 
    wchar_t snum; 
    swprintf_s(&snum, 8, L"%l", num); 
    std::wstring wnum = snum; 
    return wnum.c_str(); 
} 

回答

5

你的函數被命名爲「to string」,並且它轉換成字符串比轉換爲「LPCWSTR」更容易(也更通用):

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

如果您有需要LPCWSTR的API,你可以使用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

它可以很好地。非常感謝。 – 2009-10-15 16:38:53

0

,這個功能並沒有因爲wnum.c_str工作()點時wnum被銷燬該函數返回時被釋放的內存。

你需要你回來之前,即

return wcsdup(wnum.c_str()); 

,然後當你使用完的結果,你需要釋放它取字符串的副本,即

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