如何连接LPCWSTR
How to concatenate a LPCWSTR?
我该如何接受。。。
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;
}
LPCWSTR
是Longp指向ConstantWideSTRing的指针。宽字符串(至少在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
。
CCD_ 19就是其中之一。在Visual Studio中,您可以进入项目设置并更改多字节(宽/窄)设置,也可以直接调用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);
如果您可以将modelPath
更改为std::wstring
,这将变得很容易:
MessageBox(nullptr, (modelPath + L" not found.").c_str(), nullptr, 0);
我也将您的0
指针值更改为nullptr
。
由于std::string
表示窄字符串,std::wstring
表示宽字符串,并且两者有很大的不同,因此从一种表示转换到另一种表示是不可行的,而从合适的表示开始则可行。另一方面,可以使用C++11中的新<codecvt>
报头在表示之间进行适当的转换。
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 如何在 c++ 中连接两个 LPCWSTR
- 如何连接LPCWSTR
- 如何连接 LPCWSTR 和 char[]