如何将std :: string转换为LPTSTR?

时间:2017-05-31 08:38:57

标签: c++ windows winapi

我想调用函数TEXT(),它接受类型为LPTSTR的参数。我有std :: string,我想将其转换为LPTSTR。我在网上查了一下,但找不到我要找的东西,能帮忙吗? 感谢

2 个答案:

答案 0 :(得分:0)

使用c_str()方法获取const char *的{​​{1}}。如果它是ASCII并且您的项目是Unicode(可能是),那么std::stringMultiByteToWideChar需要进行char *转换。

答案 1 :(得分:-1)

TEXT不是一个函数,而是一个宏,如果你为UNICODE构建,它会将字符串文字声明为宽字符串。因此,您无法将其用作将std :: string转换为LPTSTR的函数。 LPTSTR取决于它是否为UNICODE构建,或者是宽字符指针的常规字符指针。

如果您不为unicode构建,请使用std::string::c_str()运算符:

MessageBox(0, str.c_str(), str.c_str(), 0);

如果您为unicode构建,如果您的文本是纯粹的ascii,您可以先将std :: string转换为std::wstring

std::wstring wstr(str.begin(), str.end());
MessageBox(0, wstr.c_str(), wstr.c_str(), 0);

或者您可以使用CA2T ATL macro,然后代码将同样适用于unicode和非unicode构建。例如:

MessageBox(0, CA2T(str.c_str()), CA2T(str.c_str()), 0);