How to convert string to LPWSTR in c++
任何人都可以帮助将
1 | string command=obj.getInstallationPath()+"<some string appended>" |
现在我想将其作为
但是
提前致谢
如果您有ANSI字符串,那么您是否考虑过调用
另一种方式:
1 | mbstowcs_s |
与string.c_str()一起使用,您可以在此处或此处找到示例
要么
1 2 3 4 | USES_CONVERSION_EX; std::string text ="text"; LPWSTR lp = A2W_EX(text.c_str(), text.length()); |
要么
1 2 3 4 5 6 7 | { std::string str ="String to LPWSTR"; BSTR b = _com_util::ConvertStringToBSTR(str.c_str()); LPWSTR lp = b; Use lp before SysFreeString... SysFreeString(b); } |
将ansi字符串转换为宽(unicode)字符串的最简单方法是使用字符串转换宏。
要使用它们,请将USES_CONVERSION放在函数的顶部,然后可以使用A2W()之类的宏非常轻松地执行转换。
例如。
1 2 | char* sz ="tadaaa"; CreateProcessW(A2W(sz), ...); |
宏在堆栈上分配空间,执行转换并返回转换后的字符串。
另外,您可能需要考虑在整个过程中使用
1 2 3 4 5 | typedef std::basic_string<TCHAR> tstring // Make any methods you control return tstring values. Thus, you could write: tstring command = obj.getInstallationPath(); CreateProcess(x, command.c_str(), ...); |
请注意,我们使用
这是另一种选择。我一直在使用此功能进行转换。
1 2 3 4 5 6 7 8 9 10 11 12 | //C++ string to WINDOWS UNICODE string std::wstring s2ws(const std::string& s) { int len; int slength = (int)s.length() + 1; len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); wchar_t* buf = new wchar_t[len]; MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len); std::wstring r(buf); delete[] buf; return r; } |
然后像这样包装您的字符串。
s2ws(volume.c_str())