如何连接LPCWSTR?

时间:2014-04-10 22:08:52

标签: c++

我该怎么做......

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;
}

2 个答案:

答案 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* LPCSTRtypedef const wchar_t* LPCWSTR

std::string是一个8位字符串(默认使用基础类型char)而std::wstring是一个更宽的字符串(即win32上的16位,使用{{1}默认情况下)。

如果可以,请使用wchar_tstd::wstring连接为替补。


关于L"string"

的说明

Windows有一个很好的习惯,就是为API调用定义宏,这些调用会根据程序的多字节配置切换底层调用。对于几乎所有使用字符串的API调用,都会进行MessageBox()FunctionA调用,分别需要FunctionWLPCSTR

LPWCSTR就是其中之一。在Visual Studio中,您可以进入项目设置并更改多字节(宽/窄)设置,或者您可以直接调用MessageBox以传递不同的字符串编码。

例如:

MessageBoxA/W