如何将 CString 转换或转换为 LPWSTR
how to convert or cast CString to LPWSTR?
我尝试使用以下代码:
USES_CONVERSION;
LPWSTR temp = A2W(selectedFileName);
但是当我检查temp
变量时,只需获取第一个字符
提前致谢
如果我没记错的话,CString
被typedef'd为CStringA
或CStringW
,这取决于你是否在构建Unicode。
LPWSTR
是"指向宽 STRing 的长指针"——又名:wchar_t*
如果要将CString
传递给需要LPWSTR
的函数,则可以执行以下操作:
some_function(LPWSTR str);
// if building in unicode:
some_function(selectedFileName);
// if building in ansi:
some_function(CA2W(selectedFileName));
// The better way, especially if you're building in both string types:
some_function(CT2W(selectedFileName));
但是LPWSTR
是对字符串的非常量访问。 您是否正在使用尝试修改字符串的函数? 如果是这样,您希望使用实际缓冲区,而不是CString
。
另外,当你"检查"temp
时 - 你是什么意思? 你试过cout << temp
吗? 因为这不起作用(它将只显示第一个字符):
char
每个字符使用一个字节。 wchar_t
每个字符使用两个字节。 对于纯英语,当您将其转换为宽字符串时,它使用与原始字符串相同的字节,但每个字符都用零填充。 由于NULL
终止符也是零,因此如果使用较差的调试器或 cout(使用 ANSI 文本),则只会看到第一个字符。
如果要将宽字符串打印为标准输出,请使用 wcout
。
简而言之:你不能。如果需要指向CString
对象的基础字符缓冲区的非常量指针,则需要调用GetBuffer
。
如果您需要常量指针,您可以简单地使用 static_cast<LPCWSTR>(selectedFilename)
.
我知道
这是一个相当古老的问题,但我也有同样的问题,以前的答案都不适合我。
但是,这确实适用于我的 unicode 构建:
LPWSTR temp = (LPWSTR)(LPCWSTR)selectedFileName;
LPWSTR 是一个"指向宽字符串的长指针"。它就像wchar*。
CString strTmp = "temp";
wchar* szTmp;
szTmp = new WCHAR[wcslen(strTmp) + 1];
wcscpy_s(szTmp, wcslen(strTmp) + 1, strTmp);
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 CComPtr<IShelltem2> 转换为 LPWSTR*?
- 如何从 LPWSTR** 转换为 std::vector<std::wstring>
- 将参数转换为lpwstr createProcess
- 从LPWSTR转换为LPTSTR
- 如何使用jni将java中的Arraylist转换为c中的lpwstr
- 使用 ATL 将 LPTSTR 转换为 LPWSTR
- 如何将 CString 转换或转换为 LPWSTR
- 如何从 LPWSTR 转换为 'const char*'
- 如何将LPCWSTR转换为LPWSTR
- atlbase.h 编译器错误 :- 无法将参数从'bool'转换为'LPWSTR'
- 错误 C2664:"wsprintfW":无法将参数 1 从"字符 *"转换为"LPWSTR"
- 将char *转换为LPWSTR
- win32 创建进程无法将参数 2 从'char *__w64 '转换为'LPWSTR'错误
- 无法将 CHAR 转换为 LPWSTR
- 将LPWSTR转换为v8::String