LPCWSTR myWindowOutput = ws.str().c_str()
производит временное (возвращаемое значение вызова str()), которое исчезло, как только закончится полный оператор. Так как вам нужно временное, вам нужно, чтобы переместить его вниз к вызову, который в конечном счете потребляющего его:
TextOutW(hdc, 150, 305, ws.str().c_str(), static_cast<int>(ws.str().length()));
Опять же, временные жизни до полного заявление не заканчивается. На этот раз это достаточно долго, чтобы использовать вызов API.
В качестве альтернативы, вы можете связать возвращаемое значение str()
к сопзЬ ссылке 1), и использовать вместо. Это может быть более подходящим, так как вам нужно использовать возвращаемое значение дважды (чтобы получить указатель на буфер, и определить его размер):
wstringstream ws;
ws << "my text" << endl;
hdc = BeginPaint(hWnd, &ps);
const wstring& s = ws.str();
TextOutW(hdc, 150, 305, s.c_str(), static_cast<int>(s.length()));
1)
Почему это работает, объясняется под GotW #88: A Candidate For the “Most Important const”.
Как вы пытаетесь отобразить строку? –