任何人都可以帮助您将string
转换为LPWSTR
string command=obj.getInstallationPath()+"<some string appended>"
现在我要将其作为CreateProcessW(xx,command,x...)
但createProcessW()
仅接受LPWSTR
,因此我需要将string
投放到LPWSTR
先谢谢
答案 0 :(得分:12)
如果您有ANSI字符串,那么您是否考虑过调用CreateProcessA
?如果有特定原因需要调用CreateProcessW
,则需要转换字符串。试试MultiByteToWideChar
功能。
答案 1 :(得分:5)
将ansi字符串转换为宽(unicode)字符串的最简单方法是使用string conversion macros。
要使用这些,请将USES_CONVERSION放在函数的顶部,然后您可以使用像A2W()这样的宏来轻松执行转换。
例如
char* sz = "tadaaa";
CreateProcessW(A2W(sz), ...);
宏在堆栈上分配空间,执行转换并返回转换后的字符串。
答案 2 :(得分:4)
另一种方式:
mbstowcs_s
与string.c_str()一起使用,您可以找到示例here或here
OR
USES_CONVERSION_EX;
std::string text = "text";
LPWSTR lp = A2W_EX(text.c_str(), text.length());
OR
{
std::string str = "String to LPWSTR";
BSTR b = _com_util::ConvertStringToBSTR(str.c_str());
LPWSTR lp = b;
Use lp before SysFreeString...
SysFreeString(b);
}
答案 3 :(得分:3)
另外,您可能要考虑在整个过程中使用TCHAR
...如果我是正确的,那么这个想法就是这样的:
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
代替CreateProcessW
或CreateProcessA
。我们的想法是,如果定义了UNICODE
,则TCHAR
typedef
为WCHAR
而CreateProcess
为#define
d为{{1}接受CreateProcessW
的;但如果未定义LPWSTR
,则UNICODE
变为TCHAR
,而char
变为CreateProcess
,其接受CreateProcessA
。但我可能没有这里的细节......这些东西似乎有点不必要的复杂:(。
答案 4 :(得分:1)
您可以将其存储在CString
中并在其上调用LPWSTR运算符:
const char* sz = "tadaaa";
const CString s( sz );
LPCWSTR ws = static_cast<LPCWSTR>( s ); //calling CString::operator (LPCWSTR)()const;
请注意,WSTR强制转换运算符仅为unicode构建定义。
答案 5 :(得分:1)
这是另一种选择。我一直在用这个函数进行转换。
//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())
答案 6 :(得分:-1)
#include "vcclr.h" //for PtrToStringChars
// Convert function
LPWSTR S2W(String^ string) {
pin_ptr<const wchar_t> wstr = PtrToStringChars(string);
return (LPWSTR)wstr;
}
// Example
String^ s = "10.0.0.1";
LPWSTR psz = S2W(s);