我该怎么做......
string modelPath = "blah/blah.obj"
并将其连接到......
L" not found."
将其作为LPCWSTR传递。我试着做
(LPCWSTR)(modelPath + " was not found.").c_str()
然而,这不起作用。以下是现在的更大范例。
if(!fin)
{
MessageBox(0, L"Models/WheelFinal.txt not found.", 0, 0); //
return;
}
答案 0 :(得分:3)
如果您可以将modelPath
更改为std::wstring
,那就很容易了:
MessageBox(nullptr, (modelPath + L" not found.").c_str(), nullptr, 0);
我也将0
指针值更改为nullptr
。
由于std::string
代表一个狭窄的字符串,std::wstring
代表一个宽字符串,两者完全不同,从一个表示转换到另一个表示不起作用,而从适当的字符串开始。另一方面,可以使用C ++ 11中的新<codecvt>
标头在表示之间正确转换。
答案 1 :(得分:3)
LPCWSTR
是 L ong P 对 C onstant W 的点击ide STR ing。 Wide strings,至少在Win32中是16位,而(const) char
个字符串(即(C)STR
或它们的指针对应LP(C)STR
)是8位。
在Win32上将它们视为typedef const char* LPCSTR
和typedef const wchar_t* LPCWSTR
。
std::string
是一个8位字符串(默认使用基础类型char
)而std::wstring
是一个更宽的字符串(即win32上的16位,使用{{1}默认情况下)。
如果可以,请使用wchar_t
将std::wstring
连接为替补。
L"string"
Windows有一个很好的习惯,就是为API调用定义宏,这些调用会根据程序的多字节配置切换底层调用。对于几乎所有使用字符串的API调用,都会进行MessageBox()
和FunctionA
调用,分别需要FunctionW
或LPCSTR
。
LPWCSTR
就是其中之一。在Visual Studio中,您可以进入项目设置并更改多字节(宽/窄)设置,或者您可以直接调用MessageBox
以传递不同的字符串编码。
例如:
MessageBoxA/W