我怎么能..。
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;
}发布于 2014-04-10 22:14:57
LPCWSTR是一个L ong P,它是一个C固定的 ide STRE 210 ing。宽弦,至少在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位字符串,默认情况下使用wchar_t )。
如果可以的话,可以使用std::wstring连接一个L"string"作为插入替换。
关于MessageBox()的一点注记
Windows有一个有趣的习惯,就是为API调用定义宏,在程序的多字节配置下关闭底层调用。对于几乎每个使用字符串的API调用,都有一个FunctionA和FunctionW调用,分别使用LPCSTR或LPWCSTR。
MessageBox就是其中之一。在Visual中,您可以进入项目设置并更改多字节(宽/窄)设置,也可以直接调用MessageBoxA/W以传递不同的字符串编码。
例如:
LPWCSTR wideString = L"Hello, ";
MessageBoxW(NULL, (std::wstring(wideString) + L"world!").c_str(), L"Hello!", MB_OK);
LPCSTR narrowString = "Hello, ";
MessageBoxA(NULL, (std::string(narrowString) + "world!").c_str(), "Hello!", MB_OK);发布于 2014-04-10 22:14:47
如果您可以将modelPath更改为std::wstring,则会变得很容易:
MessageBox(nullptr, (modelPath + L" not found.").c_str(), nullptr, 0);我也将您的0指针值更改为nullptr。
由于std::string表示的是窄字符串,std::wstring表示的是宽字符串,因此两者有很大的不同,从一种表示到另一种表示的转换不起作用,而从适当的表示开始则不起作用。另一方面,可以使用新的头在C++11中正确地在表示之间进行转换。
https://stackoverflow.com/questions/22999996
复制相似问题