任何人都可以在转换帮助string
到LPWSTR
如何转换字符串在C++
string command=obj.getInstallationPath()+"<some string appended>"
现在我笏把它作为参数CreateProcessW(xx,command,x...)
但createProcessW()
到LPWSTR只接受LPWSTR
所以我需要投string
至LPWSTR
在此先感谢
任何人都可以在转换帮助string
到LPWSTR
如何转换字符串在C++
string command=obj.getInstallationPath()+"<some string appended>"
现在我笏把它作为参数CreateProcessW(xx,command,x...)
但createProcessW()
到LPWSTR只接受LPWSTR
所以我需要投string
至LPWSTR
在此先感谢
如果您有ANSI字符串,那么您是否考虑致电CreateProcessA
?如果有特定原因需要拨打CreateProcessW
,则需要转换字符串。尝试MultiByteToWideChar
功能。
你可以将其存储在CString
并调用LPWSTR操作就可以了:
const char* sz = "tadaaa";
const CString s(sz);
LPCWSTR ws = static_cast<LPCWSTR>(s); //calling CString::operator (LPCWSTR)()const;
注意,WSTR投运营商只对Unicode的定义版本。
将ansi字符串转换为宽(unicode)字符串的最简单方法是使用string conversion macros。要使用这些,请将USES_CONVERSION放在函数的顶部,然后可以使用像A2W()这样的宏来轻松执行转换。
例如。
char* sz = "tadaaa";
CreateProcessW(A2W(sz), ...);
宏分配栈上的空间,执行转换并返回转换后的字符串。
此外,您可能要考虑使用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
ED typedef
到WCHAR
和CreateProcess
是#define
d为CreateProcessW
,它接受一个LPWSTR
;但如果UNICODE
未定义,则TCHAR
变为char
,并且CreateProcess
变为CreateProcessA
,其接受LPSTR
。不过,我可能没有细节就在这里......这东西似乎有点不必要复杂:(
另一种方法:
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);
}
这是另一种选择。我一直在使用这个函数来完成转换。
//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())
#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);
http://stackoverflow.com/questions/27220/how-to-convert-stdstring-to-lpcwstr-in-c-unicode – 2009-07-29 08:06:48
@ArsenMkrt:这个问题比你指的那个宽。 – xtofl 2009-07-29 08:40:53