关于Visual C ++:如何在C ++中将字符串转换为LPWSTR

How to convert string to LPWSTR in c++

任何人都可以帮助将string转换为LPWSTR

1
string command=obj.getInstallationPath()+"<some string appended>"

现在我想将其作为CreateProcessW(xx,command,x...)的参数传递

但是createProcessW()仅接受LPWSTR,因此我需要将string强制转换为LPWSTR

提前致谢


如果您有ANSI字符串,那么您是否考虑过调用CreateProcessA?如果有特定原因需要调用CreateProcessW,则需要转换字符串。尝试MultiByteToWideChar函数。


另一种方式:

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), ...);

宏在堆栈上分配空间,执行转换并返回转换后的字符串。


另外,您可能需要考虑在整个过程中使用TCHAR ...如果我是正确的,则想法可能是这样的:

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(), ...);

请注意,我们使用CreateProcess而不是CreateProcessWCreateProcessA。这个想法是,如果定义了UNICODE,则将TCHAR设置为WCHAR,将TCHAR设置为CreateProcessW,将CreateProcess设置为CreateProcessW,这将接受LPWSTR。但是如果未定义UNICODE,则TCHAR变为char,而CreateProcess变为CreateProcessA,接受LPSTR。但是我可能在这里没有细节...这些东西似乎有点不必要的复杂:(。


这是另一种选择。我一直在使用此功能进行转换。

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())