首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接LPCWSTR?

如何连接LPCWSTR?
EN

Stack Overflow用户
提问于 2014-04-10 22:08:51
回答 2查看 4.1K关注 0票数 2

我怎么能..。

string modelPath = "blah/blah.obj"

把它和..。

代码语言:javascript
复制
L" not found." 

同时把它作为LPCWSTR传递进来。我试着做

代码语言:javascript
复制
(LPCWSTR)(modelPath + " was not found.").c_str()

然而,这是行不通的。下面是一个更大的例子,说明它现在的样子。

代码语言:javascript
复制
if(!fin)
{
    MessageBox(0, L"Models/WheelFinal.txt not found.", 0, 0); //
    return;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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* LPCSTRtypedef const wchar_t* LPCWSTR

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

如果可以的话,可以使用std::wstring连接一个L"string"作为插入替换。

关于MessageBox()的一点注记

Windows有一个有趣的习惯,就是为API调用定义宏,在程序的多字节配置下关闭底层调用。对于几乎每个使用字符串的API调用,都有一个FunctionAFunctionW调用,分别使用LPCSTRLPWCSTR

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

例如:

代码语言:javascript
复制
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);
票数 4
EN

Stack Overflow用户

发布于 2014-04-10 22:14:47

如果您可以将modelPath更改为std::wstring,则会变得很容易:

代码语言:javascript
复制
MessageBox(nullptr, (modelPath + L" not found.").c_str(), nullptr, 0);

我也将您的0指针值更改为nullptr

由于std::string表示的是窄字符串,std::wstring表示的是宽字符串,因此两者有很大的不同,从一种表示到另一种表示的转换不起作用,而从适当的表示开始则不起作用。另一方面,可以使用新的头在C++11中正确地在表示之间进行转换。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22999996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档