有什么方法吗?我的电脑是AMD64.
::std::string str; BOOL loadU(const wchar_t* lpszPathName, int flag = 0);
我用的时候:
loadU(&str);
VS2005编译器说:
Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'
我该怎么做?
首先将其转换为std :: wstring:
std::wstring widestr = std::wstring(str.begin(), str.end());
然后得到C字符串:
const wchar_t* widecstr = widestr.c_str();
这仅适用于ASCII字符串,但如果基础字符串是UTF-8编码则不起作用.使用MultiByteToWideChar()之类的转换例程可确保正确处理此方案.
如果你有一个std :: wstring对象,你可以调用c_str()
它来得到一个wchar_t*
:
std::wstring name( L"Steve Nash" ); const wchar_t* szName = name.c_str();
但是,由于您在窄字符串上操作,因此首先需要加宽它.这里有各种选择; 一种是使用Windows的内置MultiByteToWideChar
例程.这会给你一个LPWSTR
,相当于wchar_t*
.
您可以使用ATL文本转换宏将narrow(char)字符串转换为wide(wchar_t)字符串.例如,要转换std :: string:
#include... std::string str = "Hello, world!"; CA2W pszWide(str.c_str()); loadU(pszWide);
您还可以指定代码页,因此如果您的std :: string包含UTF-8字符,您可以使用:
CA2W pszWide(str.c_str(), CP_UTF8);
非常有用,但仅限Windows.