Это просто потому, что вы должны использовать std::string::c_str()
метод.
Но в данном случае это const_cast
, поскольку const char *
, возвращаемое c_str()
, не может быть присвоено непостоянной LPSTR
.
std::string str = "something";
LPSTR s = const_cast<char *>(str.c_str());
Но вы должны быть уверены, что время жизни str
будет больше, чем время жизни переменной LPTSTR
.
Еще одно упоминание: если код компилируется как Unicode-совместимый, то типы LPTSTR
и std::string
несовместимы. Вы должны использовать std::wstring
вместо.
Важное примечание: Если вы передадите результирующий указатель s
сверху функции, которая пытается изменить данные, на которые она указывает, это приведет к неопределенному поведению. Единственный способ правильно с этим справиться - скопировать строку в неконстантный буфер (например, через strdup
)