如何在c ++中将字符串转换为LPWSTR

时间:2009-07-29 07:57:34

标签: c++ visual-c++

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

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

现在我要将其作为CreateProcessW(xx,command,x...)

的参数传递

createProcessW()仅接受LPWSTR,因此我需要将string投放到LPWSTR

先谢谢

7 个答案:

答案 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()一起使用,您可以找到示例herehere

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代替CreateProcessWCreateProcessA。我们的想法是,如果定义了UNICODE,则TCHAR typedefWCHARCreateProcess#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);